[TIL 2021.07.30] 객체지향 5대 원칙 DIP

Kyu·2021년 7월 30일
1

TIL

목록 보기
201/322

오늘은 어드민페이지 수정하느라 자바스크립트를 배우는 시간을...전혀 모르던 자바스크립트랑 php도 익숙해지는거 같다. 근데 익숙해지면 익숙해질수록 자바가 그리워지네..

오늘도 아침에 김영한님 강의를 들었다.
객체지향 5대원칙 코드로 설명해주시면서 자세히 알려주시는데 이해가 잘 안간다.

public class OrderServiceImpl implements OrderService { // OrderService는 인터페이스

    private final MemoryMemberRepository memberRepository = new MemoryMemberRepository();
    private final DiscountPolicy discountPolicy = new RateDiscountPolicy();

    @Override
    public Order createOrder(Long memberId, String itemName, int itemPrice) {
		// 구현코드
    }
}

가령 코드를 보여주시면서 이때 OrderServiceImpl은 DIP 원칙에 어긋난다고 하시는데,
왜냐하면 OrderServiceImplDisCountPolicy 인터페이스에만 의존하는게 아니라
RateDiscountPolicy에도 의존을 하고 있고 구현체를 변경했을경우에,
DisCountPolicy를 구현하고있는 또 다른 구현체인 FixDiscountPolicy를 구현하고 있기때문에
DIP 원칙에 어긋난다는 것이다.

DIP 원칙은 의존성역전의원칙

  • 상위 모듈은 하위 모듈의 구현에 의존해서는 안 된다.
  • 하위의 모듈이 상위 모듈에 정의한 추상 타입에 의존 해야한다.

출처: https://cheese10yun.github.io/spring-solid-dip/

위에 있는 코드로 예시를 들자면 상위모듈이라는 것은 할인 정책이 될것이고, 하위모듈은 각 세부적인 RateDiscountPolicyFixDiscountPolicy 같은 클래스가 하위 모듈이 될것이다.

상위 모듈은 하위 모듈의 구현에 의존해서는 안된다는 것은 상위 모듈인 OrderServiceImpl
하위모듈인 RateDiscountPolicyFixDiscountPolicy에 의존해서는 안된다는 말이다.
그래서 DIP -> 의존성을 역전했다는 말은 아직까지도 이해가 안가긴하지만..


profile
TIL 남기는 공간입니다

0개의 댓글