Single Responsibility principle : 단일 책임 원칙
Open Close Principle : 개방 폐쇄 원칙
Liscov Substitution Principle : 리스코프 치환 원칙
Interface Sergregation Principle: 인터페이스 분리 원칙
Dependency Inversion Principle : 의존성 역전 원칙
좋은 객체 지향 설계의 5가지 원칙 중 의존관계 역전 원칙(DIP)에 대해 알아보겠습니다.
Dependency Inversion Principle
프로그래머는 "추상화에 의존해야지, 구체화에 의존하면 안 된다."
공휴일은 규정에 의존하기 때문에 규정 변경될 때 공휴일이 생길 수도 없어질 수도 있습니다.
다음과 같이 코드로 표현할 수 있습니다.
public class Holiday{
private Rule rule;
public Holiday(){
this.rule = new Rule();
}
}
규정이 변경될 때 다른 결과를 가져오기 때문에 큰 영향을 끼칩니다.
영향을 느슨하게 적용하기 위해 interface로 추상화해 보겠습니다.
public class Holiday{
private Rule rule;
public Holiday(){
this.rule = new RuleV1Impl();
}
}
# Rule interface
public interface Rule{
RuleInfo getHolidayRule();
}
# Rule Implements
public class RuleV1Impl implements Rule{
public RuleInfo getHolidayRule(){
...
}
}
class 간 결합을 느슨하게 하였지만 아직까지 생성자에서 구체화를 의존하고 있습니다.
DIP를 지키기 위해 다음과 같이 변경하였습니다.
public class Holiday{
private Rule rule;
public Holiday(Rule rule){
this.rule = rule;
}
}
이제 Holiday Class는 추상화인 Rule에 의존하고 Holiday의 Rule은 외부에 의해 의존관계가 설정됩니다.
이를 의존관계 역전이라 하며, DIP를 준수하게 됩니다.
'클린코드' 카테고리의 다른 글
ISP: 인터페이스 분리 원칙 (0) | 2023.04.17 |
---|---|
LSP: 리스코프 치환 원칙 (0) | 2023.04.15 |
OCP: 개방 - 폐쇄 원칙 (0) | 2023.04.14 |
SRP: 단일 책임 원칙 (0) | 2023.04.12 |
계층형 아키텍처 (0) | 2023.04.11 |