객체지향 설계 5원칙
- SRP(Single Responsibility Principle) - 단일 책임 원칙
- OCP(Open-Closed Principle) - 개방-폐쇄 원칙
- LSP(Liskov Substitution Principle) - 리스코프 치환 원칙
- ISP(Interface Segregation Principle) - 인터페이스 분리 원칙
- DIP(Dependency Inversion Principle) - 의존관계 역전 원칙
이번에 알아볼 것은 SOLID의 D인 DIP(Dependency Inversion Principle) - 의존관계 역전 원칙에 대해 알아볼 것이다.
상위 계층(정책 결정)이 하위 계층(세부 사항)에 의존하는 전통적인 의존관계를 반전(역전)시킴으로써 상위 계층이 하위 계층의 구현으로부터 독립되게 할 수 있다.
- WIKIPEDIA -
- 상위 모듈은 하위 모듈에 의존해서는 안된다. 상위 모듈과 하위 모듈 모두 추상화에 의존해야 한다.
- 추상화는 세부 사항에 의존해서는 안된다. 세부사항이 추상화에 의존해야 한다.
DIP 예시
interface Switch {
String turnOn();
String turnOff();
}
class FanSwitch implements Switch {
@Override
String turnOn(){
return "선풍기가 켜졌습니다."
}
@Override
String turnOff(){
return "선풍기가 꺼졌습니다."
}
}
class AirconSwitch implements Switch {
@Override
String turnOn(){
return "에어컨이 켜졌습니다."
}
@Override
String turnOff(){
return "에어컨이 꺼졌습니다."
}
}
class PowerButton {
private Switch switch;
public setSwitch(Switch switch){
this.switch = switch;
}
public String turnOn(){
return switch.turnOn();
}
public String turnOff(){
return switch.turnOff();
}
}
class main {
PowerButton powerButton = new PowerButton();
Switch fanSwitch = new FanSwitch();
Switch airconSwitch = new AirconSwitch();
powerButton.setSwitch(fanSwitch);
powerButton.turnOn();
powerButton.setSwitch(airconSwitch);
powerButton.turnOn();
}
역시 예시로 스위치를 가지고 왔다. 이번 예제는 조금 길다(코드블럭으로만 작성해서 테스트는 해보지 않았다).
상위 계층인 PowerButton을, 하위 계층인 FanSwitch와 AirconSwitch를 구성하였다.
이렇게 하면 상위계층은 하위 계층의 구현과 독립될 수 있다.
느낀점
예제를 만들면서도 아직은 이해가 부족하다고 생각이 든다.
많은 예제를 찾아봤지만 만들기 어려웠고 조금 보충이 필요하다고 느껴진다.
그리고 'DIP를 적용하여 설계를 할 수 있을까?'라는 생각이 든다.
'TIL > 잡학다식' 카테고리의 다른 글
[잡학다식] RESTful API - REST API (0) | 2022.08.04 |
---|---|
[잡학다식] RESTful API - API (0) | 2022.07.28 |
[잡학다식] 인터페이스 분리 원칙(ISP: Interface Segregation Principle) (0) | 2022.07.18 |
[잡학다식] 리스코프 치환 원칙(LSP: Liskov Substitution Principle) (0) | 2022.07.13 |
[잡학다식] 개방-폐쇄 원칙(OCP: Open-Closed Principle) (0) | 2022.07.11 |