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

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์ธ ${ } , #{ }์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

Categories:

Updated:

Leave a comment