객체지향 개발 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 { } |
'Engineering > Etc' 카테고리의 다른 글
링크를 gmail 을 통해 mail 로 전달하는 chrome extension (0) | 2019.11.04 |
---|---|
하룻밤에 읽는 Go 언어 이야기 (0) | 2019.10.04 |
MsgPack 을 이용해서 직접 write 구현하기 (0) | 2018.11.22 |
Sublime Text 에서 ColorPicker 가 동작하지 않을 때 해결 방법 (0) | 2018.11.01 |
AWS S3 에 presigned url 로 파일 업로드할때 실패 해결 (0) | 2018.10.26 |