๋‚ด์ผ๋ฐฐ์›€์บ ํ”„

Spring ์ž…๋ฌธ 2์ฃผ์ฐจ : IoC์™€ DI

KIMHYEYUN 2023. 11. 3. 20:15
๋ฐ˜์‘ํ˜•

IoC(์ œ์–ด์˜ ์—ญ์ „), DI(์˜์กด์„ฑ ์ฃผ์ž…)

IoC๋Š” ์„ค๊ณ„์›์น™์— ํ–‰๋‹นํ•˜๊ณ , DI๋Š” ๋””์ž์ธ ํŒจํ„ด์— ํ•ด๋‹น

์ข‹์€ ์ฝ”๋“œ๋ฅผ ์œ„ํ•œ Spring์˜ IoC์™€ DI

๐Ÿ™‹‍โ™€๏ธ ์ข‹์€ ์ฝ”๋“œ๋ž€?

  • ๊ฐ„๋‹จํ•œ ๋…ผ๋ฆฌ
  • ์ค‘๋ณต ์ œ๊ฑฐํ•˜๊ณ  ๋ช…ํ™•ํ•œ ํ‘œํ˜„
  • ์ฝ”๋“œ๋ฅผ ์ฒ˜์Œ๋ณด๋Š” ์‚ฌ๋žŒ๋„ ์‰ฝ๊ฒŒ ์ดํ•ดํ•˜๊ณ  ์ˆ˜์ • ๊ฐ€๋Šฅ
  • ์˜์กด์„ฑ์„ ์ตœ์†Œํ™”
  • ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋”๋ผ๊ณ  ํฌ๊ฒŒ ๊ตฌ์กฐ ๋ณ€๊ฒฝ โŒ
  • ....

  • IoC์— ๋Œ€ํ•ด IoC๋Š” DI๋กœ๋„ ์•Œ๋ ค์ ธ ์žˆ๋‹ค๋ผ๊ณ  ์†Œ๊ฐœํ•˜๊ณ  ์žˆ์Œ
  • == DI ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜์—ฌ IoC ์„ค๊ณ„ ์›์น™์„ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ๋‹ค

์˜์กด์„ฑ?

public class Consumer {

    void eat() {
        Chicken chicken = new Chicken();
        chicken.eat();
    }

    public static void main(String[] args) {
        Consumer consumer = new Consumer();
        consumer.eat();
    }
}

class Chicken {
    public void eat() {
        System.out.println("์น˜ํ‚จ์„ ๋จน๋Š”๋‹ค.");
    }
}
  • ์œ„ ์ฝ”๋“œ์—์„œ ๋งŒ์•ฝ ์น˜ํ‚จ์ด ์•„๋‹ˆ๋ผ ํ”ผ์ž๋ฅผ ๋จน๊ณ  ์‹ถ์–ดํ•œ๋‹ค๋ฉด??? -> ๋งŽ์€ ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผํ•จ
public class Consumer {

    void eat(Food food) {
        food.eat();
    }

    public static void main(String[] args) {
        Consumer consumer = new Consumer();
        consumer.eat(new Chicken());
        consumer.eat(new Pizza());
    }
}

interface Food {
    void eat();
}

class Chicken implements Food{
    @Override
    public void eat() {
        System.out.println("์น˜ํ‚จ์„ ๋จน๋Š”๋‹ค.");
    }
}

class Pizza implements Food{
    @Override
    public void eat() {
        System.out.println("ํ”ผ์ž๋ฅผ ๋จน๋Š”๋‹ค.");
    }
}
  • Java์˜ Interface ๋‹คํ˜•์„ฑ์˜ ์›๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•˜๋ฉด ๊ณ ๊ฐ์ด ์–ด๋– ํ•œ ์Œ์‹์„ ์š”๊ตฌํ•˜๋”๋ผ๋„ ์‰ฝ๊ฒŒ ๋Œ€์ฒ˜ ๊ฐ€๋Šฅ
  • ์ด๋Ÿฌํ•œ ๊ด€๊ณ„๋ฅผ ์•ฝํ•œ ๊ฒฐํ•ฉ ๋ฐ ์•ฝํ•œ ์˜์กด์„ฑ ์ด๋ผ๊ณ  ํ•จ

์ฃผ์ž…?

  • ์—ฌ๋Ÿฌ ๋ฐฉ๋ฒ•์„ ํ†ตํ•ด ํ•„์š”๋กœ ํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ํ•ด๋‹น ๊ฐ์ฒด์— ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ
  1. ํ•„๋“œ ์ฃผ์ž… : ํ•„๋“œ์— ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ
  2. ๋ฉ”์„œ๋“œ ์ฃผ์ž… : set ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ํ•„์š”ํ•œ ๊ฐ์ฒด๋ฅผ ์ฃผ์ž…
  3. ์ƒ์„ฑ์ž ์ฃผ์ž…

์ œ์–ด์˜ ์—ญ์ „?

์œ„์˜ ์ฒซ๋ฒˆ์งธ ์ฝ”๋“œ์—์„œ Customer๊ฐ€ ์ง์ ‘ Food๋ฅผ ๋งŒ๋“ค์–ด ๋จน์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ƒˆ๋กœ์šด Food๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด ์ถ”๊ฐ€์ ์ธ ์ฝ”๋“œ ๋ณ€๊ฒฝ์ด ๋ถˆ๊ฐ€ํ”ผ
-> ์ด๋•Œ์˜ ์ œ์–ด์˜ ํ๋ฆ„์ด Customer -> Food

๋‘ ๋ฒˆ์งธ ์ฝ”๋“œ์—์„œ๋Š” Food๋ฅผ Customer์—๊ฒŒ ์ „๋‹ฌํ•ด์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝํ•จ์œผ๋กœ์จ Customer๋Š” ์ถ”๊ฐ€์ ์ธ ์ฝ”๋“œ ๋ณ€๊ฒฝ์ด ํ•„์š” ์—†์Œ
-> ์ œ์–ด์˜ ํ๋ฆ„์ด Food -> Customer๋กœ ์—ญ์ „

728x90
๋ฐ˜์‘ํ˜•