๐นย ์ ๋ฆฌ by ์ฅ๋ฏธ(https://velog.io/@newbiekim/)
IoC(Inversion of Control / ์ ์ด ์ญ์ ): ๊ฐ์ฒด์ ์์ฑ, ์๋ช ์ฃผ๊ธฐ์ ๊ด๋ฆฌ๊น์ง ๋ชจ๋ ๊ฐ์ฒด์ ๋ํ ์ ์ด๊ถ์ด ๋ฐ๋์๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
โ๏ธย ์คํ๋ง ํ๋ ์์ํฌ๊ฐ IoC ์ปจํ ์ด๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
IoC ์ปจํ ์ด๋: ๊ฐ์ฒด์ ์์ฑ์ ์ฑ ์์ง๊ณ ์์กด์ฑ์ ๊ด๋ฆฌํ๋ค.
*POJO์ ์์ฑ, ์ด๊ธฐํ, ์๋น์ค, ์๋ฉธ์ ๋ํ ๊ถํ์ ๊ฐ์ง๋ค.
*POJO(Plain Old Java Project): ๊ฐ์ฒด ์งํฅ์ ์ธ ์๋ฆฌ์ ์ถฉ์คํ๋ฉด์ ํ๊ฒฝ๊ณผ ๊ธฐ์ ์ ์ข ์๋์ง ์๊ณ ํ์์ ๋ฐ๋ผ ์ฌํ์ฉ ํ ์ ์๋ ๋ฐฉ์์ผ๋ก ์ค๊ณ๋ ์ค๋ธ์ ํธ.
์ธ์คํด์ค *์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ฐ๋ฐ์๊ฐ ์๋ ์ปจํ ์ด๋๊ฐ ๋์ ๊ด๋ฆฌํด ์ค๋ค.
โ ๊ฐ๋ฐ์๋ ๋ก์ง์๋ง ์ง์ค ๊ฐ๋ฅ.
*์๋ช ์ฃผ๊ธฐ: ์ธ์คํด์ค์ ์ํ์ ๋ฐ๋ผ์ ํธ์ถํ ์ ์๋ ์์ฑ.
โ๏ธย IoC ๋ถ๋ฅ
์์กด์ฑ ๊ฒ์ - DL(Dependency Lookup): ์ ์ฅ์์ ์ ์ฅ๋์ด ์๋ Bean์ ์ ๊ทผํ๊ธฐ ์ํด ์ปจํ ์ด๋๊ฐ ์ ๊ณตํ๋ API๋ฅผ ์ด์ฉํ์ฌ Bean์ Lookup ํ๋ ๊ฒ.
์์กด์ฑ ์ฃผ์ - DI(Dependency Injection): Setter Injection / Constructor Injection / Method Injection
๊ฐ ํด๋์ค ๊ฐ์ ์์กด๊ด๊ณ๋ฅผ *๋น ์ค์ ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ์ปจํ ์ด๋๊ฐ ์๋์ผ๋ก ์ฐ๊ฒฐํด์ฃผ๋ ๊ฒ.
*XML, annotation์ผ๋ก ์ค์ .
DL์ ์ฌ์ฉํ๋ฉด ์ปจํ ์ด๋ ์ข ์์ฑ์ด ์ฆ๊ฐํ๊ธฐ ๋๋ฌธ์ ์ฃผ๋ก DI๋ฅผ ์ฌ์ฉํ๋ค.
โ๏ธย DI์ ๊ฐ๋
๊ฐ๋ฐ์๊ฐ ์์กด๊ด๊ณ๋ฅผ ์ค์ ํด๋์ผ๋ฉด ์ปจํ ์ด๋๊ฐ ์๋์ผ๋ก ์ฃผ์ ํด์ค๋ค.