JAVA
[JAVA] DIP (의존 관계 역전 원칙)
준몽쓰
2025. 4. 12. 23:46
■ DIP
구체화의 의존하지 말고 추상화(인터페이스, 추상 클래스)에 의존해야 한다.
예제)
● Car는 Engine을 사용해서 움직인다.
● 엔진 종류는 GasEngine, ElectricEngine이 있다.
■ DIP 위반 (엔진에 직접 의존)
class GasEngine {
public void start() {
System.out.println("휘발유 엔진 시동");
}
}
class Car {
private GasEngine engine = new GasEngine(); // 직접 생성 (구체 클래스에 의존)
public void drive() {
engine.start();
System.out.println("차가 출발합니다!");
}
}
1) GasEngine을 ElectricEngine으로 바꾸려면 Car 클래스를 고쳐야 한다.
2) 확장성 떨어진 코드
■ DIP 준수 (인터페이스에 의존)
interface Engine { //1. 추상화 (인터페이스 정의)
void start();
}
class GasEngine implements Engine { //2. 다양한 구현체 만들기
public void start() {
System.out.println("휘발유 엔진 시동");
}
}
class ElectricEngine implements Engine {
public void start() {
System.out.println("전기 엔진 시동");
}
}
class Car { //3. Car는 추상화(Engine)에 의존
private Engine engine;
// 생성자 주입 (DI)
public Car(Engine engine) {
this.engine = engine;
}
public void drive() {
engine.start();
System.out.println("차가 출발합니다!");
}
}
public class Main {
public static void main(String[] args) {
Engine gas = new GasEngine();
Car car1 = new Car(gas);
car1.drive();
Engine electric = new ElectricEngine();
Car car2 = new Car(electric);
car2.drive();
}
}
● Car는 비즈니스 로직 담당
● GasEngine, ElectricEngine 구현체
● Engine 인터페이스이며 추상화
● Car는 Engine이라는 추상하에만 의존 (DIP 적용)