โญ IoC (Inversion of Control)
- ์ ์ด์ ์ญ์
- ์คํ๋ง ์ ํ๋ฆฌ์ผ์ด์ ์์๋ Object(Bean) ์ ์์ฑ๊ณผ ์์กด ๊ด๊ณ ์ค์ , ์ฌ์ฉ, ์ ๊ฑฐ ๋ฑ์ ์์ ์ ์คํ๋ง ์ปจํ ์ด๋๊ฐ ๋ด๋นํ๊ฒ ๋ฉ๋๋ค.
- ์ฆ ์คํ๋ง ์ปจํ ์ด๋๊ฐ Object์ ๋ํ ์ ์ด๊ถ์ ๊ฐ๊ณ ์๋ค๊ณ ํด์ IOC๋ผ๊ณ ํฉ๋๋ค.
- ๋ฐ๋ผ์ ์คํ๋ง ์ปจํ
์ด๋๋ฅผ IOC ์ปจํ
์ด๋๋ผ๊ณ ๋ถ๋ฆ
๋๋ค.
์ฆ, ์ ์ด์ ํ๋ฆ์ ๋ฐ๊พผ๋ค๋ ์๋ฏธ์ ๋๋ค. ๊ธฐ์กด์ ์๋ฐ ํ๋ก๊ทธ๋๋ฐ์๊ฐ๋ฐ์๊ฐ class๋ฅผ ์์ฑํ๋ฉด new๋ฅผ ํตํด์ ์ง์ ๊ฐ์ฒด๋ฅผ ์์ฑํํ ์ฌ์ฉํ์์ง๋ง ์ฌ์ฉ์์ ์ ์ด์์ ๋ฒ์ด๋ Spring์ ์ํด ์์ฑ๋๊ณ ๊ด๋ฆฌ๋๋ฉฐ ์ด๋ ์์ฑ๋ ์๋ฐ ๊ฐ์ฒด๋ Bean์ด๋ผ๊ณ ํฉ๋๋ค.
๊ธฐ์กด๋ฐฉ๋ฒ | Spring |
1. ๊ฐ์ฒด ์์ฑ 2. ํด๋์ค ๋ด๋ถ์์ ์์กด์ฑ ๊ฐ์ฒด ์์ฑ(new) 3. ์์กด์ฑ ๊ฐ์ฒด ๋ฉ์๋ ํธ์ถ |
1. ๊ฐ์ฒด ์์ฑ 2. ์์กด์ฑ ๊ฐ์ฒด ์ฃผ์ (์ง์ ์์ฑํ๋๊ฒ ์๋๋ผ ์คํ๋ง์ด ๋ง๋ค์ด ๋์ ๊ฐ์ฒด๋ฅผ ์ฃผ์ ) 3. ์์กด์ฑ ๊ฐ์ฒด ๋ฉ์๋ ํธ์ถ |
์คํ๋ง์ด ๋ชจ๋ ์์กด์ฑ ๊ฐ์ฒด๋ฅผ ์คํ๋ง์ด ์คํ๋ ๋ ๋ค ๋ง๋ค์ด์ฃผ๊ณ ํ์ํ๊ณณ์ ์ฃผ์ ์์ผ์ค์ผ๋ก์จ Bean๋ค์ ์ฑ๊ธํด ํจํด์ ํน์ง์ ๊ฐ์ง๋๋ค. ๋ค์ ๋งํด ์ ์ด์ ํ๋ฆ์ ์ฌ์ฉ์๊ฐ ์ปจํธ๋กค ํ๋๊ฒ์ด ์๋๋ผ ์คํ๋ง์ด ์์์ ์์ ์ ์ฒ๋ฆฌํ๊ฒ๋ฉ๋๋ค.
๊ทธ๋ผ ๋์ฒด ์? ๊ฐ์ฒด์ ์์กด์ฑ์ ์ญ์ ์ํฌ๊น์??๐ค
- ๊ฐ์ฒด๊ฐ์ ๊ฒฐํฉ๋๋ฅผ ์ค์ฌ ์ ์ฐํ ์ฝ๋๋ฅผ ์์ฑํ ์์์ต๋๋ค.
- ์ฝ๋ ์ค๋ณต์ ์ค์ด๊ณ ์ ์ง ๋ณด์๊ฐ ํธ๋ฆฌํด์ง๋๋ค.
โญ IoC ์ปจํ ์ด๋
- ์คํ๋ง์์๋ Object(Bean)์ ์์ฑ๊ณผ ์์กด ๊ด๊ณ ์ค์ , ์ฌ์ฉ, ์ ๊ฑฐ ๋ฑ์ ์์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋ ๋์ ์คํ๋ง ์ปจํ ์ด๋๊ฐ ๋ด๋นํฉ๋๋ค.
- ์ฆ ์คํ๋ง ์ปจํ ์ด๋๊ฐ Object์ ๋ํ ์ ์ด๊ถ์ ๊ฐ๊ณ ์๋ค๊ณ ํด์ IoC ๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
- ์คํ๋ง์์๋ IoC๋ฅผ ๋ด๋นํ๋ ์ปจํ ์ด๋๋ฅผ ๋นํฉํ ๋ฆฌ(BeanFactory ) , DI ์ปจํ ํ ์ด๋, ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ(ApplicationContext) ๋ผ๊ณ ํฉ๋๋ค.
- ์คํ๋ง ์ปจํ ์ด๋์ DI ๋ฅผ ์ํ ๋น ํฉํ ๋ฆฌ์ ์ฌ๋ฌ๊ฐ์ง ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ฒ์ด ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ(ApplicationContext) ์ ๋๋ค.
BeanFactory (๋น ํฉํ ๋ฆฌ)
- ์คํ๋ง ์ปจํ ์ด๋์ ์ต์์ ์ธํฐํ์ด์ค
- ์คํ๋ง bean๋ฅผ ๊ด๋ฆฌํ๊ณ ์กฐํํ๋ ์ญํ ์ ๋ด๋นํ๋ค.
- ๋ํ์ ์ผ๋ก getBean() ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ค.
ApplicationContext
- Bean Factory ๊ธฐ๋ฅ์ ๋ชจ๋ ์์๋ฐ์์ ์ ๊ณตํ๋ค.
- ๊ธฐ๋ฅ
- ํ๊ฒฝ๋ณ์
- ๋ก์ปฌ, ๊ฐ๋ฐ, ์ด์ ๋ฑ์ ๊ตฌ๋ถํด์ ์ฒ๋ฆฌํ๋ค.
- ์ ํ๋ฆฌ์ผ์ด์
์ด๋ฒคํธ
- ์ด๋ฒคํธ๋ฅผ ๋ฐํํ๊ณ ๊ตฌ๋ ํ๋ ๋ชจ๋ธ์ ํธ๋ฆฌํ๊ฒ ์ง์ํ๋ค.
- ํธ๋ฆฌํ ๋ฆฌ์์ค ์กฐํ
- ํ์ผ, Classpath ๋ฑ์์ ๋ฆฌ์์ค๋ฅผ ํธ๋ฆฌํ๊ฒ ์กฐํ๊ฐ ๊ฐ๋ฅํ๊ฒ ํด์ค๋ค.
- ํ๊ฒฝ๋ณ์
์ฐธ์กฐ