Previous


지난 챕터까지해서 간단하게 스프링의 탄생배경과 스프링이 자바진영을 대표하는 프레임워크인 심플한 이유와

객체지향프로그래밍의 5가지 원칙(SOLID)중 OCP(개방폐쇄원칙)과 DIP(의존관계역전원칙)이 제대로 지켜지지 않는 이유에 대해서 알아봤다.

그리고 스프링없이 예제 코드 작성을통해 회원-주문 어플리케이션을 요구사항분석부터 작성하면서 구현을 해 보았다. 그리고 그 과정에서 아직 OCP, DIP원칙을 지킬 수 없다는 점을 확인했다.

이번 챕터를 통해 이런 문제들을 인지하고 객체지향원리를 어떻게 적용하는지 학습한다.

새로운 할인 정책 개발


기존 구현한 회원-주문의 할인 정책을 다시 떠올려보자.

<aside> 💡 할인 정책은 모든 VIP는 1000원을 할인해주는 고정 금액 할인을 적용해달라.(변경가능)

</aside>

등급이 VIP일 경우 1000원을 고정 할인해주는 할인정책이였기에 FixDiscountPolicy를 구현해 적용하고 있었다. 하지만 뒤에 괄호내용을보면 변경가능이라는 점에 주목하자.

여기서, 기획자가 변경이 되었다며 이제 고정금액 1000원이 아닌 10%를 할인하는 정책을 적용하고싶다고 한다. 출시를 앞두고 갑자기 이런 기획변경이 생기면 곤란하지만, 이럴때 객체지향 설계 원칙이 도움이 된다. 우리는 역할과 구현으로 노출되는 인터페이스와 실제 구현체를 분리했다.

그렇기에 해당 역할만 제대로 수행한다면 구현체를 어떻게 바꾸던간에 코드에 문제가 생기지 않을 수 있다.

기존 DiscountPolicy 역할의 구현을 FixDiscountPolicy에서 손쉽게 RateDiscountPolicy로 바꿀 수 있다.

기존 DiscountPolicy 역할의 구현을 FixDiscountPolicy에서 손쉽게 RateDiscountPolicy로 바꿀 수 있다.