[SOLID] 의존 관계 역전 규칙(DIP), 의존성 주입(DI), 제어의 역전(IoC)
상위 모듈의 하위 모듈 의존성은 확장성 및 재사용성 측면에서 개선되어야 한다.
graph LR
Programmer -.-> Americano
class Programmer {
private Americano _americano;
public Programmer() {
_americano = new Americano();
}
public void drink() {
_americano.drink();
}
}
class Americano {
public void drink() {
System.out.println("Drink Americano");
}
}
DI를 적용할 때, DIP 원칙을 준수하게 된다.
graph LR
Programmer -.-> Coffee
Americano --> Coffee
class Programmer {
private Coffee _coffee;
public Programmer(Coffee coffee) {
_coffee = coffee;
}
public void drink() {
_coffee.drink();
}
}
interface Coffee {
public void drink();
}
class Americano implements Coffee {
@Override
public void drink() {
System.out.println("Drink Americano");
}
}
Programmer sleepyProgrammer = new Programmer(new Americano())
sleepyProgrammer.drink();
관심사를 분리하고, 클라이언트에게 제한적인 인터페이스를 제공하여 손쉬운 사용이 가능하도록