공부/SOLID
Dependency Inversion Principle(의존성 역전 원칙)
ironk.im
2021. 9. 21. 01:05
반응형
Dependency Inversion Principle은 의존성 역전의 원칙이라고 한다.
해당 부분은 이해하기 어려울 수 도 있는데,
고수준의 모듈이 저수준의 모듈에 의존하지 않도록 인터페이스나 추상클래스에 의존하도록 하는 것을 말한다.
우선 Dependency Inversion Principle을 준수하지 않은 경우에 대한 예제를 보자
public class Led {
public void on() {
System.out.println("LED on");
}
public void off() {
System.out.println("LED off");
}
}
public class Switch {
private Led led;
private boolean isOn;
public Switch(Led led) {
this.led = led;
this.isOn = false;
}
public void operate() {
if (isOn) {
led.off();
} else {
led.on();
}
}
}
위 코드의 Switch는 Led 타입의 변수를 가지고 있다.
이는 Switch 클래스가 Led에 의존성을 가진다고 볼 수 있다.
이 경우 Switch클래스의 전구는 Led외에는 사용할 수 없게 된다는 문제가 발생 한다.
이번에는 Dependency Inversion Principle을 준수하는 예를 보자
interface Light {
void on();
void off();
}
public class Led implements Light {
public void on() {
System.out.println("LED on");
}
public void off() {
System.out.println("LED off");
}
}
public class Switch {
private Light light;
private boolean isOn;
public Switch(Light light) {
this.light = light;
this.isOn = false;
}
public void operate() {
if (isOn) {
light.off();
} else {
light.on();
}
}
}
위 경우는 Switch가 하위 클래스에 대한 의존성을 갖는 것이 아닌 인터페이스에 대한 의존성을 갖고 있다.
이 이야기는 인터페이스를 구현하는 하위 클래스를 사용할 수 있다는 이야기가 되며, 이를 통해 하나의 타입에 대한 의존성 문제를 해결할 수 있다.
즉, Dependency Inversion Principle은 하나의 클래스에 대해 의존성이 발생하지 않도록 하는 원칙이다.
반응형