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에 의존하고 있다.
이렇게 특정 클래스가 특정 클래스를 의존하게 되면, 확장도 어렵고, 수정 시 같은 클래스를 사용하는 다른 클래스들도 확인을 해야한다.
즉, 사이드 이펙트가 발생할 가능성이 높아지게 된다.