목록Spring (293)
코드 그라데이션
새로운 구조와 할인 정책 적용 정액 할인 정책을 정률% 할인 정책으로 변경해보자. FixDiscountPolicy => RateDiscountPolicy AppConfig의 등장으로 애플리케이션이 크게 사용 영역과, 객체를 생성하고 구성(Configuration)하는 영역으로 분리되었다. 그림 - 사용, 구성의 분리 그림 - 할인 정책의 변경 변경한 코드 // 애플리케이션의 전체 동작 방식을 구성(config)하기 위해, 구현 객체를 생성하고, 연결하는 책임을 가지는 별도의 설정 클래스 public class AppConfig { //역할들을 드러나게 바꾼다! // ctrl alt M public MemberService memberService() { return new MemberServiceImpl..
AppConfig 리팩터링 현재 AppConfig를 보면 중복이 있고, 역할에 따른 구현이 잘 보이지 않는다. 기대하는 그림 AppConfig 리펙토링 // 애플리케이션의 전체 동작 방식을 구성(config)하기 위해, 구현 객체를 생성하고, 연결하는 책임을 가지는 별도의 설정 클래스 public class AppConfig { //역할들을 드러나게 바꾼다! // ctrl alt M public MemberService memberService() { return new MemberServiceImpl(memberRepository()); } public OrderService orderService() { return new OrderServiceImpl(memberRepository(), discou..
상황 가정 애플리케이션을 하나의 공연이라 생각해보자. 각각의 인터페이스를 배역(배우 역할)이라 생각하자. 그런데! 실제 배역 맞는 배우를 선택하는 것은 누가 하는가? 로미오와 줄리엣 공연을 하면 로미오 역할을 누가 할지 줄리엣 역할을 누가 할지는 배우들이 정하는게 아니다. 이전 코드는 마치 로미오 역할(인터페이스)을 하는 레오나르도 디카프리오(구현체, 배우)가 줄리엣 역할(인터페이스)을 하는 여자 주인공(구현체, 배우)을 직접 초빙하는 것과 같다. 디카프리오는 공연도 해야하고 동시에 여자 주인공도 공연에 직접 초빙해야 하는 **다양한 책임**을 가지고 있다. 관심사 분리 AppConfig 등장 애플리케이션의 전체 동작 방식을 구성(config)하기 위해, 구현 객체를 생성하고, 연결하는 책임을 가지는 별..
앞선 글에서 추가한 할인 정책을 애플리케이션에 적용한다. 일단 앞서 추가한 public class RateDiscountPolicy implements DiscountPolicy { private int discountPercent = 10; // 할인율 10% @Override public int discount(Member member, int price) { if (member.getGrade() == Grade.VIP) { return price * discountPercent / 100; // 10퍼센트 } else { return 0; } } } 이걸 적용하려면 일단 OrderServiceImpl을 조금 바꿔야 한다. (고정 할인 금액 => 할인율 적용 금액) OrderServiceImpl 수..
새로운 할인 정책 개발 **새로운 할인 정책을 확장해보자.** 1) 악덕 기획자 : 서비스 오픈 직전에 할인 정책을 지금처럼 고정 금액 할인이 아니라 좀 더 합리적인 주문 금액당 할인하는 정률% 할인으로 변경하고 싶어요. 예를 들어서 기존 정책은 VIP가 10000원을 주문하든 20000원을 주문하든 항상 1000원을 할인했는데, 이번에 새로 나온 정책은 10%로 지정해두면 고객이 10000원 주문시 1000원을 할인해주고, 20000원 주문시에 2000원을 할인해주는 거에요! 2) 순진 개발자 : 제가 처음부터 고정 금액 할인은 아니라고 했잖아요. 1) 악덕 기획자 : 애자일 소프트웨어 개발 선언 몰라요? “계획을 따르기보다 변화에 대응하기를” 2) **순진 개발자** : … (하지만 난 유연한 설계가..