DI란??

Dependency Injection

의존성 주입이라고 하며, 객체간의 의존성을 자신이 아닌 외부에서 주입하는 방법

객체 간의 결합도를 줄일 수 있음

interface Coffee {

}

class Americano extends Coffee {

}

class Latte extends Coffee {

}

위와 같은 interface와 class가 있을 때,

커피를 원하는 고객이라는 클래스를 생성한다고 가정한다.

의존 관계가 있는 코드를 작성한다면,

class CustomerA {
	Coffee coffee;

  void order() {
    this.coffee = new Americano();
  }
}

class CustomerB {
  Coffee coffee;
  
  void order() {
    this.coffee = new Latte();
  } 
}

코드 안에서 특정 커피를 생성하여 커피를 만들게 된다.

즉, CustomerA는 Americano 클래스에 의존해 있고,

CustomerB는 Latte에 의존하고 있다.

이렇게 특정 클래스가 특정 클래스를 의존하게 되면, 확장도 어렵고, 수정 시 같은 클래스를 사용하는 다른 클래스들도 확인을 해야한다.

즉, 사이드 이펙트가 발생할 가능성이 높아지게 된다.