Dependency Inversion Principle (의존역전 원칙)
의존역전 원칙(DIP)은 추상화에 의존해야지, 구체화에 의존하면 안 된다는 원칙이다. 고수준 모듈은 저수준 모듈의 구현에 휘둘리지 않아야 하며, 둘 다 추상화(인터페이스)에 의존해야 한다.
준수 시 이점
- 결합도 감소: 특정 기술(DB 종류, 외부 라이브러리 등)에 종속되지 않는 핵심 비즈니스 로직을 작성할 수 있다.
- 테스트 용이성: 실제 객체 대신 가짜 객체(Mock)를 주입하기 쉬워져 단위 테스트 효율이 극대화된다.
예시 코드
interface Keyboard { void type(); }
class MechanicalKeyboard implements Keyboard {
public void type() { System.out.println("찰칵찰칵"); }
}
class Computer {
private final Keyboard keyboard;
// 구체적인 클래스가 아닌 인터페이스(추상화)에 의존
public Computer(Keyboard keyboard) {
this.keyboard = keyboard;
}
void start() { keyboard.type(); }
}