IoC ๋?
Inversion of Control : ์์กด ๊ด๊ณ ์ฃผ์ ( Dependency Injection) ์ด๋ผ๊ณ ๋ ํ๋ฉฐ, ์ด๋ค ๊ฐ์ฒด๊ฐ ์ฌ์ฉํ๋ ์์กด ๊ฐ์ฒด๋ฅผ ์ง์ ๋ง๋ค์ด ์ฌ์ฉํ๋๊ฒ ์๋๋ผ, ์ฃผ์ ๋ฐ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋งํจ
์คํ๋ง IoC ์ปจํ ์ด๋
- BeanFactory
- ์ ํ๋ฆฌ์ผ์ด์ ์ปดํฌ๋ํธ์ ์ค์ ์ ์ฅ์
- ๋น ์ค์ ์์ค๋ก ๋ถํฐ ๋น ์ ์๋ฅผ ์ฝ์ด๋ค์ด๊ณ , ๋น์ ๊ตฌ์ฑํ๊ณ ์ ๊ณตํ๋ค.
์ปจํ ์ด๋๊ฐ ๊ด๋ฆฌํ๋ ๊ฐ์ฒด๋ฅผ ๋น(bean)์ด๋ผ๊ณ ํ๊ณ , ์ด ๋น(bean)๋ค์ ๊ด๋ฆฌํ๋ค๋ ์๋ฏธ๋ก ์ปจํ ์ด๋๋ฅผ
๋น ํฉํ ๋ฆฌ(BeanFactory) ๋ผ๊ณ ๋ถ๋ฅธ๋ค.
BeanFactory์ ์ฌ๋ฌ ๊ฐ์ง ์ปจํ ์ด๋ ๊ธฐ๋ฅ์ ์ถ๊ฐํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์ค(ApplicationContext)๋ผ๊ณ ๋ถ๋ฆ
OwnerController ๊ฐ IoC ์ปจํ ์ด๋ ๋ด๋ถ์ ๋ค์ด์ค๊ณ , ์ปจํ ์ด๋์์ OwnerController ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด ์ค๋ค.
๊ทธ๋ฆฌ๊ณ , OwnerRepository ์ ๊ฐ์ฒด๋ ๋ง๋ค์ด ์ค๋ค. -> Bean
์ฆ, Bean๋ค์ ์์กด์ฑ๋ค์ ์๋์ผ๋ก ๊ด๋ฆฌํด์ค๋ค.
IoC ์ปจํ ์ด๋๋ Bean๋ค์ ์์กด์ฑ์ ์ฎ์ด์ฃผ๋ฉฐ ์ฃผ์ ์ ์๋์ ์ผ๋ก ํด์ฃผ๋ ์ญํ ์ ํ๋ค.
IoC ์ปจํ ์ด๋ : OwnerController๊ฐ Bean์ผ๋ก ๋ฑ๋ก์ด ๋๊ณ (@Controller๋ผ๋ ์ด๋ ธํ ์ด์ ์ด ๋ถ์ด์๊ธฐ ๋๋ฌธ์), IoC ์ปจํ ์ด๋ ๋ด๋ถ์ ๋ค์ด๊ฐ์ ๊ทธ ๊ฐ์ฒด๋ค์ ๋ง๋ค๊ณ , ๊ทธ ๊ฐ์ฒด๋ค์ ์์กด์ฑ์ ์ฎ์ด์ค๋ค. OwnerRepository ๋ผ๋ Bean์ ์ฐพ์์ ์์ฑ์์๋ค๊ฐ ์์กด์ฑ์ ์ฃผ์ ์์ผ์ฃผ๋ ์ผ์ ํ๋ค.
๋น
- ์คํ๋ง IoC ์ปจํ ์ด๋๊ฐ ๊ด๋ฆฌํ๋ ๊ฐ์ฒด
- ์ฅ์
- ์์กด์ฑ ๊ด๋ฆฌ
- ์ค์ฝํ
- ์ฑ๊ธํค(๊ธฐ๋ณธ๊ฐ) : ํ๋์ ๊ฐ์ฒด
- ํ๋กํ ํ์ : ๋งค๋ฒ ๋ค๋ฅธ ๊ฐ์ฒด
- ๋ผ์ดํ์ฌ์ดํด ์ธํฐํ์ด์ค
ApplicationContext
- BeanFactory
- ๋ฉ์์ง ์์ค ์ฒ๋ฆฌ ๊ธฐ๋ฅ
- ์ด๋ฒคํธ ๋ฐํ ๊ธฐ๋ฅ
- ๋ฆฌ์์ค ๋ก๋ฉ ๊ธฐ๋ฅ
- ....
ApplcationContext : ์๊ฐ Bean๋ค์ ๋ง๋ค๊ณ , ๊ทธ Bean๋ค์ ์์กด์ฑ์ ์ฎ์ด์ค๋ค. ์ค๋ก์ง Bean๋ค๋ง ๊ด๋ฆฌ!