DI์ IoC
class B {}
class A {
B obj = new B();
}class A์์ class B๋ฅผ new ํค์๋๋ก ์์ฑํ๊ณ ์๋ค๋ฉด ์ด๋ฅผ "A๋ B์ ์์กด์ ์ด๋ค" ๋ผ๊ณ ์๊ธฐํ๋ค.
IoC (Inversion of Control)
๊ฐ๋ฐ์๊ฐ ์ง์ ์์กด์ฑ์ ์ ์ดํ๋ ๊ฒ์ ์ด๋ค ๋งค๊ฐ์ฒด์๊ฒ ์์๊ถ์ ๋นผ์๊ธฐ๊ฒ ๋์ด ์ ์ด์ ์ฃผ์ฒด๊ฐ ๊ฐ๋ฐ์๊ฐ ์๋๊ธฐ ๋๋ฌธ์ โ์ ์ด์ ์ญ์ โ์ด ๋ฐ์ํ๋ค๊ณ ๋ณผ ์ ์๋ค. ์ฌ๊ธฐ์ ๋งค๊ฐ์ฒด๋ฅผ โIoC ์ปจํ
์ด๋โ ๋ผ๊ณ ํ๋ค.
IoC ์ปจํ ์ด๋๋ ์ ์ด๊ถ ๊ฐ์ง๊ณ ์์กด์ฑ์ ๊ด๋ฆฌํ๋ฉด์ ์ธ์คํด์ค๋ฅผ ์์ฑ ํ ์ฃผ์ ํด ์ฃผ๋ฉฐ ๋ฉ๋ชจ๋ฆฌ ํด์ ๊น์ง ๋ด๋นํ๋ค.
์ด๋ฌํ IoC๋ ์ฃผ๋ก Spring๊ณผ ๊ฐ์ ํ๋ ์์ํฌ์ ํฌํจ๋์ด ์๋ค.
Spring IoC Container์ Spring Bean
์คํ๋ง ํ๋ ์์ํฌ์์ ๊ฐ์ฒด์ ์์ฑ-์ฃผ์
-ํด์ ๋ฅผ ๊ด๋ฆฌํ๋ ์ญํ ์ ํ๋ ๊ฒ์ด IoC ์ปจํ
์ด๋์ด๋ค.
์๋ฅผ ๋ค์ด์ ์๋ ์ปจํธ๋กค๋ฌ์ new Service()๋ฅผ ์ ์ธํด์ ์ปจํธ๋กค๋ฌ๊ฐ ์๋น์ค๋ฅผ ์์กดํ๋ ์ํฉ์ด ์๋ค.
ํ์ง๋ง ์ปจํ ์ด๋์์ ์๋น์ค ๋น์ ๋ฑ๋กํ๊ฒ ๋๊ณ
์ปจํธ๋กค๋ฌ์์๋ ์ปจํ ์ด๋๋ฅผ ํตํด ์๋น์ค ๋น์ ์ฃผ์ ๋ฐ๋๋ค. (DI)
์ด์ ๋ IoC ์ปจํ ์ด๋๋ก๋ถํฐ ๋น์ ์ฃผ์ ๋ฐ๋ ์ํฉ์ด๋ค. ์ด๊ฒ์ ์ ์ด๊ฐ ๋ค๋ฐ๋๋ค๊ณ ํํํ๋ค.
Spring Bean์ด๋?

์งง๊ฒ ์ ์ํ๋ฉด IoC ์ปจํ ์ด๋์ ์ํด ์์ฑ๋์ด ๊ด๋ฆฌ๋๋ Java ๊ฐ์ฒด์ด๋ค. ์ฆ, ๊ฐ๋ฐ์๊ฐ new๋ก ์์ฑํ ๊ฐ์ฒด๊ฐ ์๋๋ค.
@Bean ์ด๋ ธํ ์ด์ ์ด ๋ถ์ผ๋ฉด return ํ๋ ๊ฐ์ฒด๊ฐ ์คํ๋ง ๋น์ด ๋๊ณ , ๋น ์ด๋ฆ์ ๋ช ์ํ์ง ์์ผ๋ฉด ์๋ฌธ์๋ก ์์ํ๋ ๋ฉ์๋ ์ด๋ฆ์ด ์๋์ผ๋ก ๋น ์ด๋ฆ์ผ๋ก ์ฌ์ฉ๋๋ค.
DI (Dependency Injection)
์์กด์ฑ์ ํ๋์ ๋ชจ๋(ํด๋์ค, ํจํค์ง ๋ฑ)์ด ๋ค๋ฅธ ๋ชจ๋์ ์ฌ์ฉํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
๐ค ๊ทธ๋ผ ์์กด์ฑ ์ฃผ์ ์?
์ ๊ทธ๋ฆผ์ ์์์ฒ๋ผ, Controller๊ฐ Service๋ฅผ ์ฌ์ฉ(์์กด)ํ๊ณ ์์ ๋, Service๋ฅผ ์ง์ new ํค์๋๋ก ์์ฑํด์ ์ฌ์ฉํ๋ ๊ฒ์ด ์๋๋ผ ์ธ๋ถ์์ Service์ ์ธ์คํด์ค๋ฅผ ์์ฑํด์ ์ฃผ์ ํด ์ฃผ๋ ๊ฒ์ด๋ค.
์ฆ, ์ฌ์ฉํ ๊ฐ์ฒด์ ์์ฑ์ ์ธ๋ถ์์ ์ํํ๊ณ , ํด๋์ค(์ธํฐํ์ด์ค) ํ์ ์ ๋ฉค๋ฒ ๋ณ์๋ง ์ ์ธ ํ ์์ฑ์๋ฅผ ๊ตฌํํด์ ์ฌ์ฉํ๋ค. ํ๋ง๋๋ก ํํํ๋ฉด ํน์ ํด๋์ค๊ฐ ์ฌ์ฉํ๋ ๋ค๋ฅธ ๊ฐ์ฒด, ์ฐธ์กฐํด์ผ ๋๋ ๊ฐ์ฒด๋ฅผ ํด๋น ํด๋์ค์์ ์ฝ๋์์ผ๋ก ๋ช ์ํ๋ ๊ฒ์ด ์๋๋ผ ์ธ๋ถ์์ ๊ฒฐ์ ํด์ ์์ฑ ํ ์์ฑ์๋ก ๋๊ฒจ์ค๋ค.
โ ๊ทธ๋ผ ๋๊ฐ ๊ฐ์ฒด๋ฅผ ์์ฑํด์ฃผ์ง?
Controller๊ฐ Service๋ฅผ ์์กดํ๊ณ ์์ ๋, Service๋ฅผ new๋ก ์์ฑํด์ ์ฌ์ฉํ๋ ๊ฒ์ด ์๋๋ผ ์ธ๋ถ์์ Service์ ์ธ์คํด์ค๋ฅผ ์์ฑํด์ ์ฃผ์ ํด ์ฃผ๋ ๊ฒ์ด๋ค.
Spring Framework์ ์ค์ ์ ๋ณด๋ค์ ํตํด Spring IoC Container์ ๋น์ด ๋ฑ๋ก๋๋๋ฐ, ํ์ํ ๊ฒฝ์ฐ ์ปจํ ์ด๋์์ ๋น์ ์ฃผ์ ๋ฐ๋๋ค.
Summary

์์์๋ ๋ฐ๋ณตํด์ ์ ์์ง๋ง, DI๋ IoC ์ปจํ
์ด๋๋ผ๋ "๋งค๊ฒ์ฒด"๋ฅผ ๋๊ณ ํ์ํ ๋ชจ๋์ ๋ฑ๋กํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ฌ์ฉ์ฒ์์ ์ง์ ์์ฑํ๋ ๊ฒ์ด ์๋๋ผ ํ์ํ ๊ฒฝ์ฐ IoC ์ปจํ
์ด๋๊ฐ ์ฃผ์
ํด ์ค๋ค. ์ด๋ก์จ ์ ์ด์ ์ญ์ ์ด ๋ฐ์ํ๋ค.
์ด๋ฅผ ํตํด ์๋์ ๊ฐ์ ์ฅ์ ์ ์ทจํ ์ ์๋ค๊ณ ์๊ฐํ๋ค.
์์กด์ฑ ๊ฐ์ (์ ์ง๋ณด์, ์ฌ์ฌ์ฉ, ๋ณ๊ฒฝ์ ์ฉ์ด)
ํด๋์ค๊ฐ ๊ฒฐํฉ๋๊ฐ ๋ฎ์์ง๋ฉด ์ง์ ์ ์ธ ์ฐ๊ด๊ด๊ณ๊ฐ๋ฐ์ํ์ง ์์ ๊ฐ ํด๋์ค๋ค์ ๋ณ๊ฒฝ์ด ์์ ๋ก์์ง๋ค.
์ฝ๋์ ๊ฐ์
ํ ์คํธ ์ฉ์ด
Last updated