김영한의 스프링 강의를 보면서 클론 코딩을 해보던 중에 할인 정책을 변경하기 위해 "OrderServiceImpl"클래스의 코드를 수정하였다. 강의를 듣는 중에 이렇게 하면 될것이다? 라는 생각으로 구현을 했는데 강의 도중 이 부분은 객체지향적 설계의 DIP 위반을 했다는 점이다. 역할(interface)와 구현체(impl)을 충실하게 분리 했다. -> OK! 다형성 활용, 인터페이스, 구현 객체를 분리 했다. -> OK! OCP, DIP 같은 객체 지향적 설계원칙을 준수했다. -> 그렇게 느꼈지만, 사실은 아니다. 왜 문제일까? DIP: 주문서비스 클라이언트(OrderServiceImpl)은 'DiscountPolicy' 인터페이스에 의존하여 DIP 원칙을 지킨것 같은데? 클래스 의존 관계를 분석해보았..