[๋์์ธ ํจํด] SOLID ์์น
S
Single Resposibility Principal(๋จ์ผ ์ฑ ์์ ์์น) : ์ด๋ค ํด๋์ค ํ ๊ฐ๋ ํ๋์ ์ฑ ์๋ง ๊ฐ์ง๋ค.
์๋ฅผ ๋ค์ด,
Class ADD {
// ๋ํ๊ธฐ ๊ธฐ๋ฅ์ ์ ๊ณตํ ์ฑ ์๋ง ๊ฐ์ ธ์ผ ํจ
// ๋นผ๊ธฐ, ๋ํ๊ธฐ ๋ฑ๋ฑ ๋ถ๊ฐ์ ์ผ๋ก ์ ๊ณตํ๋ฉด SRP๋ฅผ ์๋ฐํจ
}
O
Open Close Principal(๊ฐ๋ฐฉ ํ์์ ์์น) : ๊ฐ๋ฐฉ์๋ open๋์ด ์๊ณ , ์์ ์๋ close๋์ด ์์ด์ผ ํ๋ค.
์๋ฅผ ๋ค์ด,
A.class๋ฅผ ๋ง๋ค์ด์ ํ ์คํธํ๊ณ ์๋น์ค๋ ํ๊ณ ์์.
์ด๋ฌํ ์ํฉ์์ A.class๋ฅผ ๊ธฐ๋ฅ ๋ณด์์ ํ๊ณ ์ถ์ ๋ A.class๋ฅผ ๊ณ ์น๋ ๊ฒ์ด ์๋๋ผ, ์๋ก์ด ํด๋์ค๋ฅผ ๋ง๋ค์ด์ ์ ํด๋์ค์์ ๊ธฐ๋ฅ ๋ณด์์ ํด์ผ ํ๋ค.
์ฆ, ๊ธฐ์กด์ ์๋ ํด๋์ค๋ฅผ ์๋์ง ์๊ณ (์์ ์๋ close), ์๋ก์ด ํด๋์ค๋ฅผ ๋ง๋ค์ด์ ๋ณด์ํด์ผ ํจ.(์๋ก์ด ํด๋์ค ์์ฑ์๋ open)
L
Liscov Subtitution Principal(๋ฆฌ์ค์ฝ๋ธ ์นํ ๋ฒ์น) : ๋ถ๋ชจ ๊ฐ์ฒด์ ์์ ๊ฐ์ฒด๊ฐ ์์ ๋, ๋ถ๋ชจ ๊ฐ์ฒด๋ฅผ ํธ์ถํ๋ ๋์์์ ์์ ๊ฐ์ฒด๊ฐ ๋ถ๋ชจ ๊ฐ์ฒด๋ฅผ ์์ ํ ๋์ฒดํ ์ ์๋ค. ์ฆ, A ๊ฐ์ฒด๊ฐ B ๊ฐ์ฒด์ ์์ ํด๋์ค์ผ ๋, A ํด๋์ค์ B ํด๋์ค๋ฅผ ๋ฐ๊ฟ๋ ๋ฌธ์ ๊ฐ ์์ด์ผ ํ๋ค.
I
Interface Sergregation Pricipal(์ธํฐํ์ด์ค ๋ถ๋ฆฌ ๋ฒ์น) : ํ๋์ ๊ด๋ฒ์ํ ์ธํฐํ์ด์ค๋ณด๋ค ๊ตฌ์ฒด์ ์ธ ์ฌ๋ฌ ๊ฐ์ ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค์ด์ผ ํ๋ค. ์ด๋ฅผ ์ํด ๊ฐ์ฒด๋ ์์ ์ด ์ฌ์ฉํ๋ ๋ฉ์๋์๋ง ์์กดํด์ผ ํ๋ค.
์ธํฐํ์ด์ค๋ฅผ ์ง๋์น๊ฒ ๊ด๋ฒ์ํ๊ฒ ๊ตฌํํด์๋ ์๋๋ฉฐ, ๊ทธ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฐ์ฒด๋ฅผ ๊ธฐ์ค์ผ๋ก ์๊ฒ ๋ถ๋ฆฌํด์ผ ํ๋ค.
์๋ฅผ ๋ค์ด,
์ ๊ทธ๋ฆผ์์ User1, User2, User3 ๊ฐ์ฒด ๋ชจ๋ OPS๋ฅผ ์์๋ฐ๊ณ ์๋ค. ์ด ์ํฉ์์ User1 ๊ฐ์ฒด๋ op1 ๋ฉ์๋๋ง์, User2 ๊ฐ์ฒด๋ op2 ๋ฉ์๋๋ง์, User3 ๊ฐ์ฒด๋ op3 ๋ฉ์๋๋ง์ ์ฌ์ฉํ๋ค๊ณ ๊ฐ์ ํ๋ค. User1 ๊ฐ์ฒด๋ OPS๋ฅผ ์์๋ฐ๊ธฐ ๋๋ฌธ์ op1, op2, op3 ๋ฉ์๋ ๋ชจ๋๋ฅผ ์ฌ์ฉํ ์ ์์ง๋ง, op2 ๋ฉ์๋์ ๋ณ๋์ด ์์ ๊ฒฝ์ฐ, User1์ ํด๋น ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ง๋ ์๋๋ฐ ์ฌ์ปดํ์ผ๋๋ ๊ณผ์ ์ ๊ฑฐ์ณ์ผ ํ๋ค.
์ด๋ ์์๋ฐ์ ์ธํฐํ์ด์ค๊ฐ ์ง๋์น๊ฒ ๊ด๋ฒ์ํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ํ๋ ๋ฌธ์ ์ด๋ค.
์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด OPS๋ฅผ ์์๋ฐ๋ U1Ops, U2Ops, U3Ops๋ก ๋ถ๋ฆฌํ์ฌ ๊ฐ๊ฐ์ ๊ฐ์ฒด๊ฐ ์์๋ฐ๋๋ก ํ๋ฉด, ๊ฐ ๊ฐ์ฒด๋ ์์ ์ด ์ฌ์ฉํ๋ ๋ฉ์๋๋ง์ ์ฌ์ฉํ ์ ์๋ ๊ตฌ์กฐ๊ฐ ๋๋ค.
D
Dependency Inversion Principal(์์กด์ฑ ์ญ์ ์์น) : ๊ฐ์ฒด๋ ๊ตฌ์ฒด์ ์ธ ๊ฐ์ฒด๊ฐ ์๋๋ผ, ์ถ์ํ์ ์์กดํด์ผ ํ๋ค.
์ธํฐํ์ด์ค, ์ถ์ํด๋์ค์ ๊ฐ์ ๊ณ ์์ค ๋ชจ๋์ด ๋ฉ์ธ ํด๋์ค, ๊ฐ์ฒด์ ๊ฐ์ ์ ์์ค ๋ชจ๋์ ์์กดํด์๋ ์๋๋ค.
์ฌ์ค ๊ณ ์์ค ํด๋์ค๊ฐ ์ ์์ค ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ๊ณ ์์ค ํด๋์ค๊ฐ ์ ์์ค ํด๋์ค์ ์์กดํ๋ ๊ฒ์ด ์์ฐ์ค๋ฌ์ ๋ณด์ผ ์ ์๋ค.
ํ์ง๋ง ์ ์์ค ํด๋์ค๋ ๋น๋ฒํ๊ฒ ๋ณ๊ฒฝ๋๊ณ , ์๋ก์ด ๊ฒ์ด ์ถ๊ฐ๋ ๋๋ง๋ค ๊ณ ์์ค ํด๋์ค๊ฐ ์ํฅ์ ๋ฐ๊ธฐ ์ฌ์ฐ๋ฏ๋ก ์์กด๊ด๊ณ๋ฅผ ์ญ์ ์์ผ์ผ ํ๋ค.
์ด๋ฌํ ์์น๋ค์ ์งํค๋ฉด ์ข๊ฒ ๋ค๋ผ๋ ๊ฒ์ด์ง, ๋ฌด์กฐ๊ฑด ์ง์ผ์ผ๋ง ํ๋ ๊ฒ์ ์๋๋ค. ์งํค์ง ์๋๋ค๊ณ ํด์ ์ปดํ์ผ ์ค๋ฅ๊ฐ ๋๋ ๋ฑ์ ๋ฌธ์ ๋ ๋ฐ์ํ์ง ์์ง๋ง ์ข์ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ํด์ ๊ฐ๋ฐ์๊ฐ ์ด๋ฌํ ์์น์ ์งํค๋ฉด์ ํ๋ก๊ทธ๋๋ฐํ๊ฒ ๋ค๋ ๋ง์๊ฐ์ง์ ๊ฐ์ ธ์ผ ํ๋ค.