๐ย SOLID ๋ ๋ก๋ฒํธ C.๋งํด์ด ์ ์ํ ๊ฐ์ฒด์งํฅํ๋ก๊ทธ๋๋ฐ ๋ฐ ์ค๊ณ์ ๋ค์ฏ๊ฐ์ง ๊ธฐ๋ณธ ์์น์ด๋ค.
์ด๋ค ํด๋์ค๋ฅผ ๋ณ๊ฒฝํด์ผ ํ๋ ์ด์ ๋ ์ค์ง ํ๋๋ฟ์ด์ด์ผ ํ๋ค. - ๋ก๋ฒํธ C.๋งํด
๋ชจ๋ ํด๋์ค๋ ๊ฐ๊ฐ ํ๋์ ์ฑ
์๋ง์ ๊ฐ์ง๋ผ๋ ๋ป์ด๋ค.
ํ๋์ ๊ฐ์ฒด๋ ์์ ์ด ํ ์ ์๋ ๊ฒ๊ณผ ํด์ผ ํ๋ ๊ฒ๋ง ์ํ ํ ์ ์๋๋ก ์ค๊ณ๋์ด์ผ ํ๋ค.
โ ๋์ ์์ง๋, ๋ฎ์ ๊ฒฐํฉ
์ฌ๋์ด๋ผ๋ ํด๋์ค์ ์ด๋ฆ, ๋์ด , ํค, ํ์กํ, ๋ณ๋ ฅ, ๊ฐ๋ฐ ์ธ์ด, ๊ฐ๋ฐ ๊ฒฝ๋ ฅ์ด๋ผ๋ ํ๋๊ฐ ์๋ค.
๊ฐ๋ฐ์คํ ๊ฒํ ์ดํ๋ฆฌ์ผ์ด์ ์์ ์ฌ๋์ด๋ผ๋ ํด๋์ค๋ณด๋ค ์ง์์๋ผ๋ ํด๋์ค ๋ช ์ด ๋ ์ด์ธ๋ฆฌ๊ณ
์ด์ ํ์ํ ํ๋๋ ๊ฐ๋ฐ ์ธ์ด, ๊ฐ๋ฐ ๊ฒฝ๋ ฅ์ด๋ค. ์ด ์ธ ํ๋๋ ํ์ ์์
๋ณ์ ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ ์ฌ๋์ด๋ผ๋ ํด๋์ค ๋ช ๋ณด๋ค ํ์๋ผ๋ ํด๋์ค ๋ช ์ด ์ด์ธ๋ฆผ, ์ด์ ํ์ํ ํ๋๋ ์ด๋ฆ, ๋์ด, ํค, ํ์กํ, ๋ณ๋ ฅ ์ ๋ ์ผ ๊ฒ์ด๋ค.
๐ก ํด๋์ค์ ๋ชจ๋ ๊ธฐ๋ฅ์ ๋ค ๋ฃ๊ธฐ๋ณด๋ค ๋ชฉ์ ๊ณผ ์ทจ์ง์ ๋ง๋ ์์ฑ๊ณผ ๋ฉ์๋๋ก ๊ตฌ์ฑํด์ผ ํ๋ค.
์ฆ, ์ฌ๋ฌ ์ฑ ์๋ณด๋จ ๊ด๋ จ๋ ์ฑ ์๋ง ์ค์ผ ํ๋ค.
์ ์ค๊ณ๋ ํ๋ก๊ทธ๋จ โ ์๋ก์ด ์๊ตฌ์ฌํญ์ด๋ ๋ณ๊ฒฝ์ด ์์ ๋ ์ํฅ์ ๋ฐ๋ ๋ถ๋ถ์ ์ต์ํ์์ผ ์ ์ง๋ณด์ ํ๊ธฐ ์ฌ์ด ๋์์ด ๋ผ์ผ ํ๋ค.
์ํํธ์จ์ด ์ํฐํฐ(ํจํค์ง, ํด๋์ค, ๋ชจ๋, ํจ์ ๋ฑ)๋ ํ์ฅ์ ๋ํด์๋ ๊ฐ๋ฐฉ๋์ด์ผ ํ์ง๋ง ๋ณ๊ฒฝ์ ๋ํด์๋ ํ์๋์ด์ผ ํ๋ค. - ๋ก๋ฒํธ C. ๋งํด
์๊ตฌ์ฌํญ ๋ณ๊ฒฝ, ์ถ๊ฐ๊ฐ ์๋๋ผ๋ ๊ธฐ์กด์ ์ฝ๋๋ ์์ ์ด ์ผ์ด๋์ง ๋ง์์ผ ํ๋ฉฐ, ๊ธฐ์กด ๊ตฌ์ฑ ์์๋ฅผ ํ์ฅํด์ ์ฌ์ฌ์ฉ ํ ์ ์์ด์ผ ํ๋ค. โ ์ ์ฐ์ฑ, ์ฌ์ฌ์ฉ์ฑ, ์ ์ง๋ณด์์ฑ
OCP ์์น์ด ์๋ฐฐ๋๋ ๊ฒฝ์ฐ
์๋ธ ํ์ ์ ์ธ์ ๋ ์์ ์ ๊ธฐ๋ฐ ํ์ ์ผ๋ก ๊ต์ฒดํ ์ ์์ด์ผ ํ๋ค. - ๋ก๋ฒํธ C.๋งํด
ํ์ ํด๋์ค์ ์ธ์คํด์ค๋ ์์ํ ๊ฐ์ฒด ์ฐธ์กฐ ๋ณ์์ ๋์ ํด ์์ ํด๋์ค์ ์ธ์คํด์ค ์ญํ ์ ํ๋๋ฐ ๋ฌธ์ ๊ฐ ์์ด์ผ ํ๋ค. ์์์ ์กฐ์ง๋, ๊ณ์ธต๋๊ฐ ์๋๋ผย ๋ถ๋ฅ๋๊ฐ ๋์ด์ผ ํ๋ค.
ํ์ ํด๋์คย is a kind of
ย ์์ ํด๋์ค : ํ์ ๋ถ๋ฅ๋ ์์ ๋ถ๋ฅ์ ํ ์ข
๋ฅ์ด๋ค.
๊ตฌํ ํด๋์คย is able to
ย ์ธํฐํ์ด์ค : ๊ตฌํ ๋ถ๋ฅ๋ ์ธํฐํ์ด์ค ํ ์ ์์ด์ผํ๋ค.
โ ์์ = ํ์ฅ
๋ถ๋ชจ ํด๋์ค์ ์ธ์คํด์ค ๋์ ์์ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์ฌ์ฉํด๋ ๋ฌธ์ ๊ฐ ์์ด์ผ ํ๋ค.
๐ก LSP๋ ์์ ๊ตฌ์กฐ๊ฐ ๋คํ์ฑ์ ์ํด ์ฌ์ฉ๋ ์ ์๋๋ก ํด์ฃผ๋ฉฐ OCP์ ๊ธฐ๋ฐ์ด ๋๋ค.
ํ์ ํด๋์ค๊ฐ ์์ํด๋์ค์ ์ญํ ์ ๋์ ํด์ฃผ๋ฉฐ ๋ ผ๋ฆฌ์ ์ผ๋ก ๋ง์์ผ ํ๋ค.
`์๋ฒ์งํด๋์คํ์
ย ํ๊ธธ๋ = new ์๋ค(); //ย LSP(๋ฆฌ์ค์ฝํ ์นํ ์์น) ์๋ฐฐ *
ํฌ์ ๋ฅํด๋์คํ์
*ย ๋์ปคย = new ๊ณ ๋(); //ย ์๋ฐ๋ ๋ด๋ถ์ ์ผ๋ก ์๋ ํ์
๋ณํ`
ํด๋ผ์ด์ธํธ๋ ์์ ์ด ์ฌ์ฉํ์ง ์๋ ๋ฉ์๋์ ์์กด ๊ด๊ณ๋ฅผ ๋งบ์ผ๋ฉด ์ ๋๋ค. - ๋ก๋ฒํธ C.๋งํด
๋จ์ผ ์ฑ ์ ์์น(SRP)๋ ํ๋์ ์ฑ ์๋ง ๊ฐ๋๋ก ๋ค์์ ํด๋์ค๋ก ๋ถ๋ฆฌํ์๋ค.
์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น์ ๊ฐ ์ญํ ์ ๋ง๊ฒ ์ธํฐํ์ด์ค๋ฅผ ๋ถ๋ฆฌํ๋ ๊ฒ์ด๋ค.
๋จ์ผ ์ฑ ์ ์์น(SRP)๊ณผ ์ธํฐํ์ด์ค ๋ถํ ์์น(ISP)์ ๊ฐ์ ๋ฌธ์ ์ ๋ํ ๋ค๋ฅธ ํด๊ฒฐ์ฑ ์ด๋ผ๊ณ ๋ณผ ์ ์๋ค. ๊ฐ๋ฅํ ์ต์ํ์ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋๋ก ํ์ฌ ๋จ์ผ ์ฑ ์์ ๊ฐ์กฐํ๋ค๊ณ ๋ณผ ์ ์๋ค. ์ผ๋ฐ์ ์ผ๋ก ISP ๋ณด๋ค SRP ๋ฅผ ๊ถ์ฅํ๋ค.
โ ๊ธฐ์กด ํด๋ผ์ด์ธํธ์ ๋ณํ๋ฅผ ์ฃผ์ง ์์ผ๋ฉด์ ์ธํฐํ์ด์ค ๋ง์ ๋ถ๋ฆฌํ์ฌ ๊ตฌํํด์ผ ํ๋ค.
์์กด์ฑ ์ฝํ, ๋ฆฌํฉํ ๋ง ๋ฐ ๊ตฌ์กฐ ๋ณ๊ฒฝ ์ฉ์ด
๐ก ๋ถ๋ฆฌํ๋ฉด ์ ๋น ์ธํฐํ์ด์ค ์์ฒด๊ฐ ๋ณํด๋ ์ด์ ์ ํด๋ผ์ด์ธํธ์ ์ํฅ์ ์ฃผ์ง ์๋๋ค.
๋จ์ผ ์ฑ ์ ์์น(SRP)๊ณผ ์ธํฐํ์ด์ค ๋ถํ ์์น(ISP)์ ๊ฐ์ ๋ฌธ์ ์ ๋ํ ๋ ๊ฐ์ง ๋ค๋ฅธ ํด๊ฒฐ์ฑ ์ด๋ผ๊ณ ๋ณผ ์ ์๋ค.๊ฐ๋ฅํ ์ต์ํ์ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋๋ก ํ์ฌ ๋จ์ผ ์ฑ ์์ ๊ฐ์กฐํ๋ค๊ณ ๋ณผ ์ ์๋ค.์ผ๋ฐ์ ์ผ๋ก ISP๋ณด๋ค SRP ํ ๊ฒ์ ๊ถ์ฅํ๊ณ ์๋ค.
DIP๋ฅผ ๋ง์กฑํ๋ ค๋ฉด ๊ตฌ์ฒด์ ์ธ ํด๋์ค๋ณด๋ค ์ธํฐํ์ด์ค๋ ์ถ์ ํด๋์ค์ ์์กด ๊ด๊ณ๋ฅผ ๋งบ๋๋ก ์ค๊ณํด์ผ ํ๋ค.
์ถ์ํ๋ ๊ฒ์ ๊ตฌ์ฒด์ ์ธ ๊ฒ์ ์์กดํ๋ฉด ์ ๋๋ค. ๊ตฌ์ฒด์ ์ธ ๊ฒ์ด ์ถ์ํ๋ ๊ฒ์ ์์กดํด์ผ ํ๋ค.
์์ฃผ ๋ณ๊ฒฝ๋๋ ๊ตฌ์ฒด(Concrete) ํด๋์ค์ ์์กดํ์ง ๋ง๋ผ
- ๋ก๋ฒํธ C.๋งํด -
์์กด๊ด๊ณ๋ฅผ ๋งบ์ ๋ ๋ณํํ๊ธฐ ์ฌ์ด ๊ฒ ๋๋ ์์ฃผ ๋ณํํ๋ ๊ฒ๋ณด๋ค ๋ณํํ๊ธฐ ์ด๋ ค์ด ๊ฒ, ๊ฑฐ์ ๋ณํ๊ฐ ์๋ ๊ฒ์ ์์กดํด์ผ ํ๋ค.
์ฆ, ๊ตฌ์ฒด์ ์ธ ํด๋์ค๋ณด๋ค ์์ ํด๋์ค, ์ธํฐํ์ด์ค, ์ถ์ ํด๋์ค์ ๊ฐ์ด ๋ณํ์ง ์์ ๊ฐ๋ฅ์ฑ์ด ๋์ ํด๋์ค์ ๊ด๊ณ๋ฅผ ๋งบ์ด์ผ ํ๋ค.
ํ์ด์ด ์ธํฐํ์ด์ค๋ฅผ ์ถ๊ฐํด๋๊ณ ์์กด ๊ด๊ณ๋ฅผ ์ญ์ ์ํด
๐ก DIP ์์น์ ๋ฐ๋ฅด๋ ๋ฐฉ๋ฒ์ ์์กด์ฑ ์ฃผ์ (DI: Dependency Injection)์ ํ์ฉํ๋ ๊ฒ์ด๋ค.