오늘은 어드민페이지 수정하느라 자바스크립트를 배우는 시간을...전혀 모르던 자바스크립트랑 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 원칙에 어긋난다고 하시는데,
왜냐하면 OrderServiceImpl은 DisCountPolicy 인터페이스에만 의존하는게 아니라
RateDiscountPolicy에도 의존을 하고 있고 구현체를 변경했을경우에,
DisCountPolicy를 구현하고있는 또 다른 구현체인 FixDiscountPolicy를 구현하고 있기때문에
DIP 원칙에 어긋난다는 것이다.
DIP 원칙은 의존성역전의원칙
- 상위 모듈은 하위 모듈의 구현에 의존해서는 안 된다.
- 하위의 모듈이 상위 모듈에 정의한 추상 타입에 의존 해야한다.
위에 있는 코드로 예시를 들자면 상위모듈이라는 것은 할인 정책이 될것이고, 하위모듈은 각 세부적인 RateDiscountPolicy나 FixDiscountPolicy 같은 클래스가 하위 모듈이 될것이다.
상위 모듈은 하위 모듈의 구현에 의존해서는 안된다는 것은 상위 모듈인 OrderServiceImpl이
하위모듈인 RateDiscountPolicy와 FixDiscountPolicy에 의존해서는 안된다는 말이다.
그래서 DIP -> 의존성을 역전했다는 말은 아직까지도 이해가 안가긴하지만..