본문 바로가기

TroubleShooting/Etc

객체지향 개발 5대 원리 : SOLID

728x90

객체지향 개발 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 {

}