9์ฅ์์๋ ์ด์ ์ ์ค๋ช ํ ์์กด์ฑ์ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์ ์๋ ์ค๊ณ ์์น์ ๊ทผ๊ฑฐํด ๋ค์ ์ค๋ช ํ๋ค.
์ ๋ฒ์ฃผ์ ๋์์ธ ํจํด์์ ํฉํ ๋ฆฌ ๋ฉ์๋๋ฅผ ๊ณต๋ถํ ๋ ์ดํด๊ฐ ์ ์ ๋์๋๋ฐ,
์ด๋ฒ ์ค๋ธ์ ํธ 9์ฅ์ ์ฝ์ผ๋ฉด์ ์ ์์ฑํ๋ ๋ถ๋ถ์ ๋ถ๋ฆฌํ๋ ํด๋์ค๋ฅผ ๋ง๋ค์ด์ผ ํ๋์ง์ ๋ํ ์ด์ ๋ฅผ ์๊ฒ ๋์๋ค.
์ด๊ฒ๋ ์ญ์ ๊ฐ์ฒด์งํฅ์ ์ธ ์ค๊ณ, ์ฆ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๊ณ ์ฌ์ฌ์ฉ์ฑ์ ๋์ด๊ธฐ ์ํด์์ธ๋ฐ ์์กด์ฑ ๋ณ๊ฒฝ์ ์ํฅ์ ์ต์ํ ํ๊ธฐ์ํด ์ถ์ํ์๋ง ์์กดํ๊ฒ ๋ง๋ค๋ ค๋ฉด ๊ฐ์ฒด๊ฐ ๊ตฌ์ฒด ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ฉด ์ ๋๋ค. ๊ทธ๋์ ๋๋ฉ์ธ ๊ฐ๋ ์ ํ ๋น๋ผ ์๋ ๊ฐ์ฒด ์์ฑ ์ฑ ์์ ๋๋ฉ์ธ ๊ฐ๋ ๊ณผ ์๋ฌด ์๊ด์ด ์๋ ๊ฐ๊ณต์ ๊ฐ์ฒด, factory๋ก ์ฎ๊ธด ๊ฒ์ด๋ค.
๊ฐ๋ฐฉ ํ์ ์์น (Open-Closed Principle, OCP)
- ํ์ฅ์๋ ์ด๋ ค์๊ณ , ์์ ์๋ ๋ซํ ์์ด์ผ ํ๋ค.
-> ์ปดํ์ผ ํ์ ์์กด์ฑ์ ์ ์งํ๋ฉด์ ๋ฐํ์ ์์กด์ฑ์ ํ์ฅ/์์ ๊ฐ๋ฅ
-> ์ด๋ ๊ฒ ํ๋ ค๋ฉด ๋ชจ๋ ์์๊ฐ ์ถ์ํ์ ์์กดํด์ผ ํจ.
๊ฐ์ฒด์ ์์ฑ๊ณผ ์ฌ์ฉ์ ๋ถ๋ฆฌํ๋ ๋ฐฉ๋ฒ (separating use from creation)?
- ๊ฐ์ฒด ์์ฑ์ ํด๋ผ์ด์ธํธ์์ ํด์ผํจ
- ๋๋ ๊ฐ์ฒด ์์ฑ๊ณผ ๊ด๋ จ๋ ์ฑ ์๋ง ์ ๋ดํ๋ ๋ณ๋์ ๊ฐ์ฒด ์ถ๊ฐ
-> ์ด๋ฐ ๊ฐ์ฒด๋ฅผ Factory๋ผ๊ณ ๋ถ๋ฆ
-> factory๋ ๊ฐ์ฒด์ ์์ฑ ์ฑ ์์ ํ ๋นํ ๋งํ ๋๋ฉ์ธ ๊ฐ์ฒด๊ฐ ์กด์ฌํ์ง ์์ ๋ ์ ํํ ์ ์๋ pure fabrication์
(pure fabrication์ ์ฑ ์์ ํ ๋นํ๊ธฐ ์ํด ์ฐฝ์กฐ๋๋ ๋๋ฉ์ธ๊ณผ ๋ฌด๊ดํ ์ธ๊ณต์ ์ธ ๊ฐ์ฒด๋ฅผ ์๋ฏธํ๋ค)
์์กด์ฑ ์ฃผ์ ์ด๋ (Dependency Injection)?
์ฌ์ฉํ๋ ๊ฐ์ฒด๊ฐ ์๋ ์ธ๋ถ์ ๋ ๋ฆฝ์ ์ธ ๊ฐ์ฒด๊ฐ ์ธ์คํด์ค๋ฅผ ์์ฑํ ํ ์ด๋ฅผ ์ ๋ฌํด์ ์์กด์ฑ์ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ(p.293)
์์กด์ฑ ์ฃผ์ ์ ์์กด์ฑ์ ํด๊ฒฐ(์ปดํ์ผ ํ์ ์์กด์ฑ๊ณผ ๋ฐํ์ ์์กด์ฑ์ ์ฐจ์ด์ ํด์) ํ๊ธฐ ์ํด ์์กด์ฑ์ ๊ฐ์ฒด์ ํผ๋ธ๋ฆญ ์ธํฐํ์ด์ค์ ๋ช ์์ ์ผ๋ก ๋๋ฌ๋ด์ ์ธ๋ถ์์ ํ์ํ ๋ฐํ์ ์์กด์ฑ์ ์ ๋ฌํ ์ ์๋๋ก ๋ง๋๋ ๋ฐฉ๋ฒ.
1. ์์ฑ์ ์ฃผ์ (constructor injection)
2. setter ์ฃผ์ (setter injection)
3. ๋ฉ์๋ ์ฃผ์ (method injection)
์ด ๋ถ๋ถ๋ ์คํ๋ง์ ๊ณต๋ถํ๋ฉด์ ์ ๋ง... ๋ค์ ๋๋ง๋ค ์์ํ๋ ์ฉ์ด์ธ๋ฐ, ์ ์์กด์ฑ ์ฃผ์ ์ด๋ผ๊ณ ๋ถ๋ฆฌ๋๋ฉด ์ธ๋ถ์์ ์์กด์ฑ์ ๋์์ ํด๊ฒฐํ ํ ์ด๋ฅผ ์ฌ์ฉํ๋ ๊ฐ์ฒด์ ์ฃผ์ ํ๊ธฐ ๋๋ฌธ์ด๋ค. ์๋ฅผ ๋ค์ด, ๋ด๊ฐ ํธ๋ํฐ์ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ ํธ๋ํฐ์ ์์กดํ๋ค๊ณ ํ ์ ์๋๋ฐ ์ด๋ ๋ด๊ฐ ํธ๋ํฐ์ ์ฌ์ฉํ๊ธฐ ์ํด์ ์์ฑ๋ ํ๊ณ ์ฌ์ฉ๋ ํ๋ ๊ฒ์ด ์๋๋ผ ๋๊ตฐ๊ฐ, ์๋ง๋ ํฉํ ๋ฆฌ๊ฐ ํธ๋ํฐ์ ์์ฑํด์ ๋์๊ฒ ์ฃผ๋ ๊ฒ์ผ๋ก ์ดํดํ๋ค.
// TODO
์์กด์ฑ ์ฃผ์ ๋ค์ ์ฝ์ด๋ณด๊ธฐ
์์กด์ฑ ์ญ์ ์์น์ด๋ (Dependency Inversion Principle, DIP)?
1. ์์ ์์ค์ ๋ชจ๋์ ํ์ ์์ค์ ๋ชจ๋์ ์์กดํด์๋ ์ ๋๋ค. ๋ ๋ชจ๋ ์ถ์ํ์ ์์กดํด์ผ ํ๋ค.
2. ์ถ์ํ๋ ๊ตฌ์ฒด์ ์ธ ์ฌํญ์ ์์กดํด์๋ ์๋๋ค. ๊ตฌ์ฒด์ ์ธ ์ฌํญ์ ์ถ์ํ์ ์์กดํด์ผ ํ๋ค(p.302).
์์กด์ฑ ์ญ์ ์์น์ ์ธํฐํ์ด์ค์ ์์ ๊ถ์๋ ์ ์ฉ์ด ๋๋๋ฐ ๋ณดํต์ ์ธํฐํ์ด์ค๊ฐ ์ฌ์ฉํ๋ ์ชฝ(ํด๋ผ์ด์ธํธ)์ด ์๋ ์๋ฒ ์ชฝ ํจํค์ง์ ์์นํ๋ค. ํ์ง๋ง ๋งํด ํ์ธ๋ฌ์ separated interface์ ๋ฐ๋ฅด๋ฉด ์ถ์ํ๋ ๋ณ๋์ ๋ ๋ฆฝ์ ์ธ ํจํค์ง๊ฐ ์๋๋ผ ํด๋ผ์ด์ธํธ๊ฐ ์ํ ํจํค์ง์ ๋์์ ์ปดํ์ผ ์ ํ์ํ ์ฝ๋๊ฐ ๊ฐ์ด ์๋๋ก ํด์ผ ํ๋ค. ํจ๊ป ์ฌ์ฌ์ฉ๋ ํ์๊ฐ ์๋ ํด๋์ค๋ค์ ๋ฐ๋ก ๋ถ๋ฆฌํ๋ฉด ๋น๋ ์๊ฐ์ ์ค์ผ ์ ์๋ค.
๊ทธ๋ฆฌ๊ณ ๊ฐ์ฅ ์ค์ํ ๊ฑด ํ๋ ฅ๊ณผ ์ฑ ์์ด๋ค. ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๊ฒฐ์ ์ ๋ชจ๋ ์ฑ ์์ด ์๋ฆฌ๋ฅผ ์ก์ ํ ๊ฐ์ฅ ๋ง์ง๋ง์ ์ ํ๋ ๊ฒ์ด ์ ์ ํ๋ค.
// TODO
๋น๋ ์๊ฐ, ๋ฐฐํฌ์ ํจํค์ง์ ๊ด๊ณ..? ์ฌ๋ฐฐํฌ, ์ฌ์ปดํ์ผ
'์คํฐ๋ > ์ค๋ธ์ ํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ค๋ธ์ ํธ] 11์ฅ 'ํฉ์ฑ๊ณผ ์ ์ฐํ ์ค๊ณ' (0) | 2022.12.23 |
---|---|
[์ค๋ธ์ ํธ] 10์ฅ '์์๊ณผ ์ฝ๋ ์ฌ์ฌ์ฉ' (0) | 2022.12.16 |
[์ค๋ธ์ ํธ] 8์ฅ '์์กด์ฑ ๊ด๋ฆฌํ๊ธฐ' (0) | 2022.12.02 |
[์ค๋ธ์ ํธ] 7์ฅ '๊ฐ์ฒด ๋ถํด' (0) | 2022.11.25 |
[์ค๋ธ์ ํธ] 6์ฅ '๋ฉ์์ง์ ์ธํฐํ์ด์ค' (1) | 2022.11.18 |
๋๊ธ