/* ์ด ๊ธ์ ๊น์ํ๋์ ๊ฐ์๋ฅผ ๋ณด๊ณ ์ ๋ฆฌํ๋ ค๊ณ ์์ฑํ ๊ธ์ ๋๋ค.
๊ฐ์ธ์ ์ธ ๊ณต๋ถ๋ฅผ ์ํด ์ฌ๋ฆฌ๋ ๊ธ์ด๋ฏ๋ก ์ค๊ฐ ์ค๊ฐ ์ฝ๋๋ ์๋ต๋์์ต๋๋ค. */
IoC, DI, ์ปจํ ์ด๋
1. ์ ์ด์ ์ญ์ IoC(Inversion of Control)
โพ ๊ธฐ์กด ํ๋ก๊ทธ๋จ์์๋ ๊ตฌํ ๊ฐ์ฒด๊ฐ ์ค์ค๋ก ํ์ํ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ , ์ฐ๊ฒฐํ๊ณ , ์คํํ๋ค๋ฉด AppConfig๊ฐ ๋ฑ์ฅํ๊ณ ๋์ ์ ์ด์ ํ๋ฆ์ ๋ํ ๊ถํ์ ๋ชจ๋ ๊ฐ์ ธ๊ฐ๊ฒ ๋๋ค.
โพ ์ด๋ ๋ฏ ํ๋ก๊ทธ๋จ์ ์ ์ด ํ๋ฆ์ ์ง์ ์ ์ดํ๋ ๊ฒ์ด ์๋๋ผ ์ธ๋ถ์์ ๊ด๋ฆฌํ๋ ๊ฒ์ `์ ์ด์ ์ญ์ ` ์ด๋ผ๊ณ ํ๋ค.
๐ก ์ ๊น
: ํ๋ ์์ํฌ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฐจ์ด
์ ์ด์ ์ญ์
โพ ํ๋ ์์ํฌ : ๊ฐ๋ฐ์๊ฐ ์์ฑํ ์ฝ๋๋ฅผ ์ ์ดํ๊ณ ๋์ ์คํํ๋ฉฐ ๊ฐ๋ฐ์๋ ํ๋ ์์ํฌ๊ฐ ์ ์ํ ๊ท์น์ ๋ฐ๋ผ์ผ ํ๋ค.
โพ ๋ผ์ด๋ธ๋ฌ๋ฆฌ : ๊ฐ๋ฐ์๊ฐ ์ง์ ์ฝ๋๋ฅผ ์์ฑํ๊ณ , ํ์ํ ๋ ํจ์๋ ํด๋์ค๋ฅผ ํธ์ถํ๋ค. ๊ฐ๋ฐ์๊ฐ ์ง์ ์ ์ด์ ํ๋ฆ์ ๋ด๋น.
์์ฐ์ฑvs์ ์ฐ์ฑ
โพ ํ๋ ์์ํฌ : ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋ฐํ๋ฉด ๊ท์น์ ๋ฐ๋ผ์ผํ์ง๋ง ์ผ๋ฐ์ ์ธ ๊ตฌ์กฐ์ ํ์ค์ ์ค์ํ์ฌ ๋น ๋ฅด๊ฒ ๊ฐ๋ฐ.
โพ ๋ผ์ด๋ธ๋ฌ๋ฆฌ : ๊ฐ๋ฐ์์๊ฒ ๋ ๋ง์ ์ ์ฐ์ฑ์ ์ ๊ณตํ์ง๋ง, ๊ตฌ์กฐ์ ํ์ค์ ๊ฐ๋ฐ์๊ฐ ์ง์ ์ ์ํด์ผ ํจ.
์์
โพ ํ๋ ์์ํฌ : Spring, JUnit, Django, Angular, Express ...
โพ ๋ผ์ด๋ธ๋ฌ๋ฆฌ : jQuery, React, Redux ...
2. ์์กด๊ด๊ณ ์ฃผ์ (Dependency Injection)
โพ ์์กด๊ด๊ณ๋ ์ ์ ์ธ ํด๋์ค ์์กด๊ด๊ณ์ ์คํ ์์ ์ ๊ฒฐ์ ๋๋ ๋์ ์ธ ๊ฐ์ฒด(์ธ์คํด์ค) ์์กด๊ด๊ณ๋ฅผ ๋ถ๋ฆฌํด์ ์๊ฐํด์ผ ๋จ.
โพ ์ ์ ์ธ ํด๋์ค ์์กด๊ด๊ณ
: ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ์ง ์๊ณ ํด๋์ค๊ฐ ์ฌ์ฉํ๋ import ์ฝ๋๋ง ๋ณด๊ณ ์์กด๊ด๊ณ๋ฅผ ์ฝ๊ฒ ํ์ , ๋ถ์์ด ๊ฐ๋ฅํ๋ค
: ์์ ํด๋์ค ๋ค์ด์ด๊ทธ๋จ์ ๋ณด๋ฉด `OrderServiceImpl`์ `MemberRepository`, `DiscountPolicy`์ ์์กดํ๋ค๋ ๊ฒ์ ์ ์ ์๋ค. ํ์ง๋ง ์ด๋ฌํ ํด๋์ค ์์กด๊ด๊ณ ๋ง์ผ๋ก๋ ์ค์ ์ด๋ค ๊ฐ์ฒด๊ฐ `OrderServiceImpl`์ ์ฃผ์ ๋ ์ง๋ ์ ์ ์๋ค.
โพ ๋์ ์ธ ๊ฐ์ฒด ์ธ์คํด์ค ์์กด ๊ด๊ณ
: ์ ํ๋ฆฌ์ผ์ด์ ์คํ ์์ (๋ฐํ์)์ ์ธ๋ถ์์ ์ค์ ๊ตฌํ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ํด๋ผ์ด์ธํธ์ ์ ๋ฌํด์ ํด๋ผ์ด์ธํธ์ ์๋ฒ์ ์ค์ ์์กด๊ด๊ณ๊ฐ ์ฐ๊ฒฐ ๋๋ ๊ฒ์ `์์กด๊ด๊ณ ์ฃผ์ ` ์ด๋ผ๊ณ ํ๋ค
: ๊ฐ์ฒด ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ , ๊ทธ ์ฐธ์กฐ๊ฐ์ ์ ๋ฌํด์ ์ฐ๊ฒฐ๋๋ค.
: ์์กด๊ด๊ณ ์ฃผ์ ์ ์ฌ์ฉํ๋ฉด ํด๋ผ์ด์ธํธ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ , ํด๋ผ์ด์ธํธ๊ฐ ํธ์ถํ๋ ๋์์ ํ์ ์ธ์คํด์ค๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค.
: ์์กด๊ด๊ณ ์ฃผ์ ์ ์ฌ์ฉํ๋ฉด ์ ์ ์ธ ํด๋์ค ์์กด๊ด๊ณ๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ , ๋์ ์ธ ๊ฐ์ฒด ์ธ์คํด์ค ์์กด๊ด๊ณ๋ฅผ ์ฝ๊ฒ ๋ณ๊ฒฝํ ์ ์๋ค.
3. IoC ์ปจํ ์ด๋, DI ์ปจํ ์ด๋
โพ AppConfig์ฒ๋ผ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌํ๋ฉด์ ์์กด๊ด๊ณ๋ฅผ ์ฐ๊ฒฐํด์ฃผ๋ ๊ฒ์ `IoC ์ปจํ ์ด๋`, `DI ์ปจํ ์ด๋`๋ผ๊ณ ํ๋ค.
โพ ์์กด๊ด๊ณ ์ฃผ์ ์ ์ด์ ์ ๋ง์ถ์ด ์ต๊ทผ์๋ ์ฃผ๋ก DI ์ปจํ ์ด๋ ๋ผ๊ณ ํ๋ค.
(ใ ใ ใ ใ ใ ใ ์ด๋ฆ ๊ฐ์ง๋๋ค๊ณ ํ์ จ์ใ ใ ใ ใ ใ ใ )