IOC (Inversion of Control), DL(Dependency Lookup), DI (Dependency Injection)
โจ IoC (Inversion of Control) ๋?
"์ ์ด์ ์ญ์ " ์ด๋ผ๋ ์๋ฏธ๋ก, ๊ฐ์ฒด๋ ๋ฉ์๋์ ํธ์ถ์ ๊ฐ๋ฐ์๊ฐ ๊ฒฐ์ ํ๋ ๊ฒ์ด ์๋, ๊ฐ์ฒด์ ์์ฑ์์๋ถํฐ ์๋ช ์ฃผ๊ธฐ์ ๊ด๋ฆฌ๊น์ง ๋ชจ๋ ๊ฐ์ฒด์ ๋ํ ์ ์ด๊ถ์ด ๋ฐ๋์๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
โจ IoC์ ์ฅ์
๊ฐ์ฒด์ ์์กด์ฑ์ ์ญ์ ์์ผ ๊ฐ์ฒด ๊ฐ์ ๊ฒฐํฉ๋๋ฅผ ์ค์ด๊ณ ์ ์ฐํ ์ฝ๋๋ฅผ ์์ฑ ํ ์ ์๊ฒ ํ์ฌ ๊ฐ๋ ์ฑ ๋ฐ ์ฝ๋ ์ค๋ณต, ์ ์ง ๋ณด์๋ฅผ ํธํ๊ฒ ํ ์ ์๊ฒ ํ๋ค.
โจ IoC์ ๋ถ๋ฅ ( DL / DI )
1. DL (Dependency Lookup)
"์์กด์ฑ ๊ฒ์" ์ด๋ผ๋ ์๋ฏธ๋ก, ์ด๋ Bean์ ์ ๊ทผํ๊ธฐ ์ํด ์ปจํ ์ด๋๊ฐ ์ ๊ณตํ๋ API๋ฅผ ์ด์ฉํ์ฌ Bean์ Lookupํ๋ ๊ฒ ์ด๋ค.
/* ์๋์ ๊ฐ์ด Bean์ ๋ํ ์ ๋ณด๊ฐ ์๋ XMLํ์ผ์ด ์๋ค๊ณ ๊ฐ์ ํด๋ณด์ */
<beans>
<bean id="myObject" class="com.Yunamom.MyObject" />
</beans>
/* Java์์๋ ํด๋น XML์ Bean ์ ๋ณด๋ฅผ ๋ณด๊ณ ๊ฒ์์ ํตํด ์ด๋ค ํด๋์ค๋ฅผ ์ฌ์ฉํ ์ง ์ฃผ์
ํ๊ฒ ๋๋ค. */
String myConfigLoc = "classPath:myAppContext.xml";
AbstractApplicationContext appCtx = new GenericXmlApplicationContext(myConfigLoc);
MyObject myobject = appCtx.getBean("myObject:, MyObject.class);
์์ ๊ฐ์ ์ฝ๋๋ฅผ ํตํด MyObject ํด๋์ค๋ฅผ ๊ฒ์ํ์ฌ ๊ฐ์ ธ์ฌ ์ ์๋ค.
2. DI (Dependency Injection)
"์์กด์ฑ ์ฃผ์ " ์ด๋ผ๋ ์๋ฏธ๋ก, ์ด๋ ๊ฐ ํด๋์ค ๊ฐ์ ์์กด์ฑ์ ์์ ์ด ์๋ ์ธ๋ถ(์ปจํ ์ด๋)์์ ์ฃผ์ ํ๋ ๊ฒ ์ด๋ค.
์๋ฐ๋ก ํ๋ก๊ทธ๋๋ฐ์ ํ๋ฉด์ ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ ์ง์ ํด๋์ค์ new์ฐ์ฐ์๋ฅผ ์ด์ฉํ์ฌ ์์ฑํ์๋ค. ํ์ง๋ง DI๋ ๊ฐ๋ฐ์๊ฐ ์ง์ ์ฝ๋ฉ์ ํ์ฌ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๊ฒ์ด ์๋๋ผ, ์ปจํ ์ด๋(IoC)๊ฐ ์ด๋ฅผ ์์ฑ์์ผ ์ฃผ๋ ๊ฒ์ด๋ค. ๊ทธ๋ ๊ฒ ๋๋ค๋ฉด ์ฝ๋์์ ์ง์ ์ ์ธ ์ฐ๊ด๊ด๊ณ๊ฐ ๋ฐ์ํ์ง ์์ ๊ฐ ํด๋์ค๋ค์ ๋ณ๊ฒฝ์ด ์์ ๋ก์ ์ง๋๋ฐ, ์ด๋ฅผ ๋์จํ ๊ฒฐํฉ์ด๋ผ๊ณ ํ๋ค.
๊ฐ ํด๋์ค๋ค๊ฐ์ ๊ฒฐํฉ๋๊ฐ ๋๊ฒ๋๋ฉด ์ ์ง๋ณด์๊ฐ ํ๋ค๊ฒ ๋๋ค. ๋ฐ๋ผ์ ๊ฐ ํด๋์ค๋ค๊ฐ์ ์ฐ๊ด ๊ด๊ณ๋ฅผ ํด๋์ค ๋ด์์ ๋งบ์ด์ฃผ๋ ๊ฒ์ด ์๋๋ผ ์คํ๋ง ์์ฒด์์ ์ค์ ์ ํตํด ์ฐ๊ด ๊ด๊ณ๋ฅผ ๋งบ์ด์ค์ผ๋ก์จ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถฐ์ค๋ค.
์คํ๋ง์์๋ ์์กด๊ด๊ณ๋ฅผ ์ค์ ํ๋ xmlํ์ผ์์ ๊ฐ๊ฐ์ ํด๋์ค ๊ฐ์ฒด๋ฅผ<bean>ํ๊ทธ๋ก ํ์ํ๋ค.
<bean> ํ๊ทธ์ ์์ฑ | ์ค๋ช |
id | ๋น ๊ฐ์ฒด์ ๊ณ ์ ์ด๋ฆ์ผ๋ก, ์ด๋ฅผ ์ด์ฉํ์ฌ ๋น์ ์ ๊ทผํ๋ฉฐ ์ค๋ณต๋์๋ ์๋๋ค. |
name | ๋น ๊ฐ์ฒด์ ๋ณ์นญ |
class | ์์ฑํ ํด๋์ค ์ด๋ฆ (๋น ๊ฐ์ฒด๋ฅผ ์ฃผ์ ํ ํด๋์ค์ ์ด๋ฆ) |
constructor-arg | ์์ฑ์๋ฅผ ์ด์ฉํด ๊ฐ์ ์ฃผ์ ํ ๋ ์ฌ์ฉํ๋ค. |
property | setter๋ฅผ ์ด์ฉํด ๊ฐ์ ์ฃผ์ ํ ๋ ์ฌ์ฉํ๋ค. |
์ด๋ฌํ Bean ์ค์ ํ์ผ์ ๋ฐํ์ผ๋ก ์์กด๊ด๊ณ๋ฅผ ํ์ธํ์ฌ ์ฃผ์ ํ๋ค.
์ด๋ ๊ฐ์ฒด ๋ ํผ๋ฐ์ค๋ฅผ ์ปจํ ์ด๋๋ก ๋ถํฐ ์ฃผ์ ๋ฐ์์, ์คํ ์์ ๋์ ์ผ๋ก ์์กด ๊ด๊ณ๊ฐ ์์ฑ๋๋ ๊ฒ์ด๋ค.
๋ฐ๋ผ์ ์ปจํ ์ด๋(IoC)๊ฐ ํ๋ฆ์ ์ฃผ์ฒด๊ฐ ๋์ด ์ดํ๋ฆฌ์ผ์ด์ ์ฝ๋์ ์์กด ๊ด๊ณ๋ฅผ ์ฃผ์ ํ๊ฒ ๋๋ค.
์ฐธ๊ณ : ๋งํฌ
'FrameWork > Spring Boot' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ M1 ] ๋งฅ๋ถ Spring Tools 4 ์ค์นํ๊ธฐ (0) | 2022.03.17 |
---|---|
[Spring Boot] JPA ์ Mybatis ์ฅ/๋จ์ (0) | 2022.03.07 |
[Spring Boot] ์ดํด๋ฆฝ์ค ์ด๊ธฐ์ค์ ํ๊ธฐ (0) | 2022.03.04 |