앞에서 작성했던 코드에 좋은 객체 지향의 원리들을 적용해 봅니다.

기획자가 새로운 할인 정책을 추가해달라고 요구해서 새로운 할인 정책을 추가를 할 것 입니다.

하지만 막상 적용을 해보면 OCP, DIP를 못지키는 문제가 발생합니다.

이런 문제를 해결하기 위해 여러 과정을 거치면서 자연스럽게 스프링의 핵심 기능인 스프링 컨테이너가 왜 탄생했는지 알게 됩니다.

그리고 순수한 자바 코드를 스프링 컨테이너에서 동작하도록 간단하게 바꿔봅시다.

새로운 할인 정책 개발

"새로운 할인 정책을 확장해보자."

악덕 기획자: 서비스 오픈 직전에 할인 정책을 지금처럼 고정 금액 할인이 아니라 좀 더 합리적인 주문 금액당 할인하는 정률% 할인으로 변경하고 싶어요. 예를 들어서 기존 정책은 VIP가 10000원을 주문하든 20000원을 주문하든 항상 1000원을 할인했는데, 이번에 새로 나온 정책은 10%로 지정해두면 고객이 10000원 주문시 1000원을 할인해주고, 20000원 주문시에 2000원을 할인해주는 거에요!

순진 개발자: 제가 처음부터 고정 금액 할인은 아니라고 했잖아요.

악덕 기획자: 애자일 소프트웨어 개발 선언 몰라요? “계획을 따르기보다 변화에 대응하기를”

순진 개발자: ... (하지만 난 유연한 설계가 가능하도록 객체지향 설계 원칙을 준수했지 후후)

[참고] 애자일 소프트웨어 개발 선언 https://agilemanifesto.org/iso/ko/manifesto.html

순진 개발자가 정말 객체지향 설계 원칙을 잘 준수 했는지 확인해 봅니다.

이번에는 주문한 금액의 %를 할인해주는 새로운 정률 할인 정책을 추가해 봅니다.

Untitled

추가하는 것은 간단합니다.

DiscountPolicy가 인터페이스에 있습니다.

FixDiscountPolicy가 있으니까 RateDiscountPolicy를 추가로 개발하면 됩니다.