Dependency Injection
Factory
์๋ฐ์์ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ ๋ ํด๋์ค ํ์ ์ ์ง์ ํ์ง ์๊ณ , ํฉํ ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ์ผ์ข ์ ํจํด์ด๋ค.
์ด ํจํด์ ๊ฐ์ฒด ์์ฑ์ ์บก์ํํ์ฌ ๊ฐ์ฒด ์์ฑ ์ฝ๋๋ฅผ ๋จ์ํํ ์ ์๊ณ ์ค์์ง์คํ ํ ์ ์๋ค.
@Component
Spring Bean์ผ๋ก ๋ฑ๋กํ๊ธฐ ์ํ ์ด๋ ธํ ์ด์ ์ด๋ค. ์ฌ๊ธฐ์ Spring Bean์ด๋ ์คํ๋ง์์ ๊ด๋ฆฌํ๋ ๊ฐ์ฒด๋ก์ ์คํ๋ง IoC์ปจํ ์ด๋๊ฐ ์์ฑํ๊ณ ๊ด๋ฆฌํ๋ค.
์ด ์ด๋ ธํ ์ด์ ์ spring์์ ์์ฃผ ์ฌ์ฉ๋๋ @Service, @Repository, @Controller ๋ฑ์ ์ด๋ ธํ ์ด์ ์๋ ํฌํจ๋์ด ์๋ค.
@Bean
์ด ์ด๋ ธํ ์ด์ ์ ๊ฐ๋ฐ์๊ฐ ์ง์ ์์ฑํ๊ณ ์ ์ดํ๋ Bean์ IoC์ปจํ ์ด๋์ ๋ฑ๋กํ๋ ๊ธฐ๋ฅ์ ํ๋ค.
@Bean
์ ๋ฉ์๋ ๋ ๋ฒจ์์ ์ฌ์ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ํด๋น ๋ฉ์๋๊ฐ ์์ฑํ๋ ๊ฐ์ฒด๋ฅผ ์คํ๋ง IoC์ปจํ ์ด๋์ ๋ฑ๋กํ๋ค.์ฃผ๋ก ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ค๋ฅธ ์ค์ ํ์ผ์์ Bean ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์ ๋ฑ๋กํ ๋ ์ฌ์ฉํ๋ค.
@ComponentScan
Component๋ฅผ Scanํ๋ ์๋ฏธ๋ก ๋ฐ์๋ค์ด๋ฉด ์ฝ๋ค. @Component๋ฅผ ์ด์ฉํ์ฌ Bean์ผ๋ก ๋ฑ๋กํ๋ ค๋ ํด๋์ค๋ค์ ์ธ์ํ๋ ๋ฐฉ๋ฒ์ด๋ค.
์ค์บ ๋์ ํจํค์ง๋ ํด๋์ค๋ฅผ ์ง์ ํ์ฌ ์ฌ์ฉํ ์ ์๋ค.
Spring AOP(Aspect Oriented Programming)
ํ๊ตญ๋ง๋ก ๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ด๋ค.
๋น์ฆ๋์ค ๋ก์ง์ผ๋ก๋ถํฐ ๊ณตํต์ ์ผ๋ก ๋ฐ๋ณต๋๋ ๊ธฐ๋ฅ์ ๋ถ๋ฆฌํด๋ผ ์ ์๊ฒ ํด์ค๋ค.
์ข ๋ ์์ธํ ๋งํ์๋ฉด, ๋ฐ๋ณต์ ์ผ๋ก ๋ฐ๋ณต๋๋ ์ฝ๋๋ฅผ ์ถ์ํํ์ฌ ๊ณตํต ๋ชจ๋๋ก ๋ง๋ค๊ณ , ๋ง๋ค์ด์ง ๊ณตํต๋ชจ๋์ ์๋ํ ์ฝ๋์ ์ฝ์ ํ์ฌ ์ฌ์ฉํ๊ฒ ํ๋ค.
์ด๋ก ์ธํด์, ํต์ฌ ๋น์ฆ๋์ค์ ์ข ๋ ์ง์คํ ์ ์๊ณ ์์ง๋ ๋์ ์ฝ๋๋ฅผ ๋ง๋ค ์ ์๊ฒ ํ๋ค.
AOP์ ์ฃผ๋ ์ฉ๋์ ์๋ก๋ ๋ก๊น , ๋ณด์, ํธ๋์ญ์ ์ฒ๋ฆฌ ๋ฑ์ด ์๋ค.
Dependency Injection
์คํ๋ง์์ ๊ฐ์ฒด ๊ฐ์ ์์กด์ฑ์ ์ฃผ์ ํ๋ ๋ฐฉ์์ด๋ค.
DI๊ฐ ์์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค๋ฉด, ํ ๊ฐ์ฒด๊ฐ ์์กดํ๋ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์์กดํ๊ฒ ๋๋ค. ํ์ง๋ง ์ด๋ ๊ฒ ๋๋ฉด ํ ๊ฐ์ฒด๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด์ ์กด์ฌ์ ๊ทธ์ ๋ํ ์ ๋ณด๋ฅผ ์์์ผ ํ๊ธฐ ๋๋ฌธ์ ์์กด๋๊ฐ ๋๊ฒ ๋๋ค. ์ด๋ก ์ธํด ์ฝ๋๊ฐ ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ ์ํฅ๋๊ฐ ์ปค์ง๊ฒ ๋์ด ์ ์ง๋ณด์์ฑ์ด ์ ํ๋๊ณ ํ์ฅ์ฑ์ด ๋จ์ด์ง๊ฒ ๋๋ค.
DI๋ ๊ฐ์ฒด์ ์์กด๊ด๊ณ๋ฅผ ์ง์ ์์ฑํ์ง ์๊ณ ์ธ๋ถ๋ก๋ถํฐ(Spring์ผ๋ก๋ถํฐ) ์ฃผ์ ๋ฐ๋๋ก ํ๋ค. ์ด๊ฒ์ ๊ด๋ฆฌํ๋ ๊ฒ์ด ์คํ๋ง์ ์ปจํ ์ด๋์ด๋ค. ์ปจํ ์ด๋๋ ๊ฐ์ฒด์ ์์กด๊ด๊ณ๋ฅผ ํ์ ํ๊ณ ๊ฐ์ฒด ์์ฑ ์์ ์๋์ผ๋ก ์ฃผ์ ํ๋ค.
๊ฐ์ฒด๋ฅผ ์ฃผ์ ๋ฐ๋ ๋ฐฉ๋ฒ์ ์์ฑ์ ์ฃผ์ ๋ฐฉ์์ด ์๊ณ , setter ์ฃผ์ ๋ฐฉ์์ด ์๋ค.
์ฑ๊ธํด ํจํด
์ฝ๊ฒ ๋งํ๋ฉด ์ค์ง ํ๋์ ๊ฐ์ฒด๋ง ์์ฑํ๋๋ก ๊ฐ์ (๋๋ ๋ณด์ฅ)ํ๋ ํจํด์ด๋ค.
์ฑ๊ธํด ํจํด์ ์ ์ญ ์ํ๋ ๋ฆฌ์์ค ๊ด๋ฆฌ๋ฅผ ์ํ ํ๋์ ๊ฐ์ฒด๋ง ํ์ํ ๊ฒฝ์ฐ ์ฌ์ฉํ๋ค๊ณ ํ๋ค.
์ฑ๊ธํด ํจํด์ ํน์ง์ ๋ค์๊ณผ ๊ฐ๋ค.
ํด๋์ค ๋ด๋ถ์ ์ ์ผํ ์ธ์คํด์ค๊ฐ ์กด์ฌํ๋ค.
์ฑ๊ธํด ๊ฐ์ฒด์ ์ ๊ทผํ๊ธฐ ์ํ ์ ์ญ์ ์ธ ์ ๊ทผ์ ์ด ์ ๊ณต๋๋ค.
์ฑ๊ธํด ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ ์ค์ง ํ๊ฐ์ง ๋ฟ์ด๋ค.
๊ฐ๋ตํ ์ฑ๊ธํด ๊ฐ์ฒด๋ฅผ ์์ฑํ๋๋ก ํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์๋ฉด,
ํด๋์ค ๋ด๋ถ์ ์ ์ผํ ๊ฐ์ฒด๋ฅผ ์ ์ฅํ ๋ณ์(static ๋ณ์)๋ฅผ ์ ์ธํ๋ค.
์์ฑ์๋ฅผ private์ผ๋ก ์ ์ธํ์ฌ ์ธ๋ถ์์ ๊ฐ์ฒด ์์ฑ์ ํ์ง ๋ชปํ๋๋ก ๋ง๋๋ค.
์ฑ๊ธํด ๊ฐ์ฒด์ ์ ๊ทผํ ์ ์๋ ์ ์ผํ static ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ค.
IoC(Inversion of Control)
ํด์ํด๋ณด๋ฉด ์ ์ด(Control)์ ์ญ์ (Inversion)์ด๋ค.
๊ฐ์ฒด์์ฑ์ ๊ฐ๋ฐ์๊ฐ ํ๋ ๊ฒ์ด ์๋๋ผ ํ๋ ์์ํฌ(์คํ๋ง๊ณผ ๊ฐ์)๊ฐ ํ๋๋ก ์์ํ๋ ๊ฒ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ ๊ตฌํํ๊ธฐ ์ํด ํ์์ ์ธ ๊ธฐ์ ์ด DI(Dependency Injection, ์์กด์ฑ ์ฃผ์ )์ด๋ค. DI์ ์ฃผ์ฒด๋ ํ๋ ์์ํฌ์ธ๋ฐ, ๋ง์ฐฌ๊ฐ์ง ๋งฅ๋ฝ์ผ๋ก ๊ฐ๋ฐ์๊ฐ ๊ฐ์ฒด ๊ฐ์ ์์กด์ฑ์ ์ฃผ์ ํ๋ ๊ฒ์ด ์๋ ์คํ๋ง์ ์ปจํ ์ด๋๊ฐ ์์กด๊ด๊ณ๋ฅผ ํ์ ํ์ฌ ๊ฐ์ฒด ์์ฑ ์์ ์๋์ผ๋ก ์ฃผ์ ํ๋ ๊ฒ์ ๋งํ๋ค.
IoC์ DI๋ฅผ ์ํด์๋ ๊ฐ์ฒด์ ๊ด๊ณ๋ฅผ ๋ฏธ๋ฆฌ ์ ์ํ๋ ์์ ์ด ํ์ํ๋ค. ์คํ๋ง๋ถํธ ์ด์ ์๋ XML์๋ ์์ฑํ์์ง๋ง, ์ด์ ๋ ๋ค์ํ ์ด๋ ธํ ์ด์ ๊ณผ ์๋ฐ ์ฝ๋ ๋ฑ์ผ๋ก ๋ค์ํ๊ฒ ์์ฑํ ์ ์๋ค.
IoC์ ์ฅ์ ์ ๋ฌด์์ผ๊น? IoC๋ฅผ ํตํด์ ๊ฐ๋ฐ์๊ฐ ํต์ฌ ๋น์ฆ๋์ค์ ๋ ์ง์คํ ์ ์๋ค. ๋งค๋ฒ ๊ฐ์ฒด ๊ฐ์ ์์กด๊ด๊ณ๋ฅผ ์ค์ ํ๋ ์๊ณ ๋ฅผ ๋ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ๋ํ ์ ์ง๋ณด์์ฑ์ ๋์ผ ์ ์๋ค. ์๋ํ๋ฉด ๊ฐ์ฒด ๊ฐ์ ์ํฅ๋(๊ฒฐํฉ๋)๋ฅผ ๋ฎ์ถ๊ธฐ ๋๋ฌธ์ธ๋ฐ, ์ด๊ฒ์ ์คํ๋ง์ด ์ ๊ณตํ๋ DI๋ฐฉ์ ๋๋ถ์ด๋ค.
Spring Bean
์คํ๋ง์ด ๊ด๋ฆฌํ๋ Bean(๊ฐ์ฒด)๋ฅผ ๋งํ๋ค.
์ข ๋ ๊ตฌ์ฒด์ ์ผ๋ก๋ ์คํ๋ง ์ปจํ ์ด๋(Spring container)์์ ๊ด๋ฆฌํ๋๋ฐ, ์ด๋ ์ปจํ ์ด๋๊ฐ ๊ด๋ฆฌํ๋ ๊ฐ์ฒด๋ฅผ Spring Bean์ด๋ผ๊ณ ํ๋ค.
์คํ๋ง ์ปจํ ์ด๋๋ ๊ด๋ฆฌํ๊ธฐ๋ก ์ ์๋ ๊ฐ์ฒด์ ๋ํด์ Bean์ ์์ฑ / ์ด๊ธฐํ / ์๋ฉธ ๋ฑ์ ์๋ช ์ฃผ๊ธฐ(Life Cycle)๋ฅผ ๊ด๋ฆฌํ๋ค.
BeanFactory
Bean์ ์์ฑํ๊ณ ๊ด๋ฆฌํ๋ ์ธํฐํ์ด์ค์ด๋ค. Spring Container์ ํต์ฌ ๊ธฐ๋ฅ ์ค์ ํ๋์ด๋ค.
BeanFactory ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ํด๋์ค๋ก๋
DefaultListableBeanFactory
,XmlBeanFactory
,ApplicationContext
๋ฑ์ด ์๋ค. ์ด ํด๋์ค๋ค์ ์คํ๋ง ์ปจํ ์ด๋์์ Bean์ ์์ฑํ๊ณ ๊ด๋ฆฌํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ค.
Last updated