IoC Container
IoC
IoC ( Inversion of Control)
IoC(์ ์ด๊ถ์ ์ญ์ )๋ ๊ฐ์ฒด์ ์์ฑ , ์๋ช ์ฃผ๊ธฐ ๋ฐ ๊ด๋ฆฌ์ ์ ์ด๊ถ์ด ๋ฐ๋์๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
- ์์กด๊ด๊ณ ๊ฒฐ์ (Component dependency resolution), ์ค์ (configuration) ๋ฐ
์๋ช ์ฃผ๊ธฐ(lifeCycle)์ ํด๊ฒฐํ๊ธฐ ์ํ ๋์์ธ ํจํด(Design Pattern)
Spring์์ ๋ํ IoC๊ฐ๋ ์ ์ ์ฉํ IoC Container๋ฅผ ์ ๊ณตํ๋ค.
IoC Container
FrameWork๋ ๋ฌธ์ ๋ฐ์ํ๊ณ ๊ทธ๊ฒ์ ํด๊ฒฐํ๊ธฐ ์ํด์ ์ฌ์ฉํ๋ค.
IoC๋ ์์กด์ฑ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ ๋ง๋ค์ด์ง Container์ด๋ค.
์๋ฐSE๋ก ๋ ์๋ฐ ๊ฐ์ฒด(POJO)๋ฅผ ์๋ฐEE์ ์์กด์ ์ด์ง ์๊ฒ ์ฐ๊ฒฐํด์ค๋ค.
๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ์ธ์คํด์คํ๋ฅผ ํ๋ ํ๋(Has ~ a)์ ์ปคํ๋ง(์์กด์ฑ) ๊ด๊ณ๊ฐ ์ฌํ๋ค.
์๋ฅผ ๋ค์ด ์ผ์ํ๋ ์ฌ๋์ด ์๊ธฐ๊ฐ ํ ํ๋๊ณผ ์ผ์ ์ ํ๋๊ฒ์ ์์กด์ฑ์ด ์ฌํ๋ค๊ณ ํ ์ ์๋ค.
๋ง์ฝ ์ผ์ํ๋ ์ฌ๋์ ๊ด๋ฆฌํ๋ ๋งค๋์ ๊ฐ ์กด์ฌํ๊ณ ๋งค๋์ ๊ฐ๊ฐ ํ ์ผ์ ๋ณด๋ด์ค๋ค๋ฉด ์ผํ๋ ์ฌ๋์ ๊ฒฐ์ ๊ถ์ ๊ฐ์ง์ง ์๊ณ ์ํค๋ ์ผ์ ํ๊ฒ๋๋ค.
์ด๊ฒ์ ์๋ฐ ์ฝ๋์ ์ ์ฉํ์ฌ ๋์ปคํ๋ง๊ด๊ณ๋ฅผ ๋ง๋ค ์ ์๋ค.
//main class
DiceA a = new DiceA();
// 2๊ฐ์ ์์กด์ฑ์ด ์กด์ฌ
.....
//DiceA class
public class DiceA{
private DiceA dice;
public DiceA(){}
.....
}
์์ ๊ฐ์ด DiceA class์์ ์์์ DiceA๋ฅผ ์ ํ์ฌ ์ฌ์ฉํ๊ฒ ๋๋ค.
//main class
// Dice ์ธํฐํ์ด์ค๋ฅผ ์์ฑํ์ฌ ๊ตฌํ
Dice dice = new DiceA();
// ์ธํฐํ์ด์ค๋ฅผ ํตํด ์์กด์ฑ์ ์ง์์ง๋ง ์์ง 1๊ฐ๊ฐ ์กด์ฌ
//๋ฃจ์ฆ์ปคํ๋ง
.....
//DiceA class
public class DiceA implements Dice{
private DiceA dice;
public DiceA(){}
.....
}
์์ ๊ฐ์ด ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ์ฌ ๋ฃจ์ฆ์ปคํ๋ง ๊ด๊ณ๋ฅผ ๋ง๋ค์ด ์ค ์ ์๋ค.
ํ์ง๋ง ์์ง main class์์๋ ์์กด์ฑ์ ๊ฐ์ง๊ณ ์๋๋ฐ IoC ๋ฅผ ์ ์ฉํ์ฌ ์์กด์ฑ์ ์ง์ธ ์ ์๋ค.

IoC Container๋ ์ด๋ฌํ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ฒ ๋๋๋ฐ
- Setter Injection
- Constructor Injection
์ธ๋ถํ์ผ์ ์ ์ฅํ์ฌ ๋ถ๋ฌ์ค๋ ๋ฐฉ๋ฒ์ผ๋ก Meta-Data๋ฅผ ์ฌ์ฉํ๋ค.
Spring์์๋ resourceํ์ผ๋ก ~.xml์ ์ฌ์ฉํ๋ค.
Setter Injection
Spring์์๋ field๊ฐ ์ ํ ์ด ์๋ Property์ ํ ์ด๋ผ ํ๋ค.
<beans ....>
<!-- ์ํ๊ฐ์ ์
ํ
-->
<bean id="diceA" class="DiceA"/>
<bean id="instance identifier" class="์์ฑํ ๋น class">
<property name="dice">
<ref bean="diceA" />
</property>
</bean>
<bean id="player" class="์์ฑํ ๋น class">
<property name="dice" ref="diceA"/>
</bean>
</beans>
Constructor Injection
<beans ....>
<!--์์ฑ์-->
<bean id="diceA" class="DiceA"/>
<bean id="instance identifier" class="์์ฑํ ๋น class">
<constructor-arg>
<ref bean="diceA"/>
</constructor-arg>
</bean>
<bean id="player01" class="์์ฑํ ๋น class">
<constructor-arg ref="diceA">
</bean>
<bean id="player02" class="์์ฑํ ๋น class">
<constructor-arg value="์ค๋ฒ๋ผ์ด๋ฉ">
....
</bean>
</beans>
- IOC ~.xml์์๋ EL tag์ธ ${ } , #{ }์ ์ฌ์ฉํ ์ ์๋ค.
Leave a comment