객체지향 개발 5대 원리 : SOLID
객체지향 개발 5대 원리 : SOLID
책에서 본 내용, 인터넷에서 본 내용을 정리해 보려고 일단 작성하고 저장하고 있어 아직 완성 상태가 아닙니다.
5. DIP(Dependency Inversion Principle : 의존성 역전의 원칙)
: A. HIGH LEVEL MODULES SHOULD NOT DEPEND UPON LOW LEVEL MODULES. BOTH SHOULD DEPEND UPON ABSTRACTIONS.
: B. ABSTRACTIONS SHOULD NOT DEPEND UPON DETAILS. DETAILS SHOULD DEPEND UPON ABSTRACTIONS.
: 상위 레벨 모듈은 하위 레벨 모듈에 의존하지 말아야 한다. 두 모듈는 추상에 의존해야 한다.
: 추상은 상세(detail) 에 의존하지 말아야 한다. 상세는 추상에 의존해야 한다.
하위 레벨의 변경이 상위 레벨 견경을 요구하는 구조적 디자인의 의존 관계를 역전시킨다는 의미이다. 하위/상위 레이어 모듈이 추상을 매개로 메시지를 서로 전달하도록 한다.
다음과 같은 조건에 따라 분기가 되는 코드(구조적 디자인)들은 또다른 조건이 생길 경우 관련 코드들을 수정해야 한다.
|
int calculate(int type) { int result; if (type == 1) { Type1 type1 = new Type1(); result += type1.useCoupon(); } else if (type == 2) { Type2 type2 = new Type2(); result += type1.useCoupon(); } ... return result; } |
인터페이스를 통해 코드를 변경했다.
"상위 레벨의 레이어가 하위 레벨의 레이어를 바로 의존하게 하는 것이 아니라 이 둘 사이에 존재하는 추상 레벨을 통해 의존해야 한다. 이를 통해 상위 레벨 모듈은 하위 레벨 모듈로의 의존성에서 벗어나 그 자체로 재사용되고 확장성도 보장 받을 수 있다."
|
int calculate(IType iType) { IType type = iType; result += type.useCoupon(); ... }
interface IType { int useCoupon(); }
class Type1 implements IType { } |