
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) **순진 개발자** : … (하지만 난 유연한 설계가..

주문과 할인 도메인 개발 할인 정책 인터페이스 DisCountPolicy // 할인 정책 인터페이스 public interface DiscountPolicy { /** * @return 할인 대상 금액 */ int discount(Member member, int price); } 정액 할인 정책 구현체 FixDiscountPolicy // 정액 할인 구현체 public class FixDiscountPolicy implements DiscountPolicy { private int discoutnFixAmount = 1000; // 1,000원 할인 @Override public int discount(Member member, int price) { if (member.getGrade() == Gra..

주문과 할인 도메인 설계 주문과 할인 정책 회원은 상품을 주문할 수 있다. 회원 등급에 따라 할인 정책을 적용할 수 있다. 할인 정책은 모든 VIP는 1000원을 할인해주는 고정 금액 할인을 적용해달라. (나중에 변경 될 수 있다.) 할인 정책은 변경 가능성이 높다. 회사의 기본 할인 정책을 아직 정하지 못했고, 오픈 직전까지 고민을 미루고 싶다. 최악의 경우 할인을 적용하지 않을 수 도 있다. (미확정) **주문 도메인 협력, 역할, 책임 # 참고 : 실제로는 주문 데이터를 DB에 저장하겠지만, 예제가 너무 복잡해 질 수 있어서 생략하고, 단순히 주문 결과를 반환한다. 주문 도메인 전체 주문 도메인 클래스 다이어그램 주문 도메인 객체 다이어그램 1 회원을 메모리에서 조회하고, 정액 할인 정책(고정 금액..
회원 엔티티 Grade public enum Grade { // 고객 등급 BASIC, VIP } Member // 회원 엔티티 public class Member { private Long id; private String name; private Grade grade; public Member(Long id, String name, Grade grade) { this.id = id; this.name = name; this.grade = grade; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName..

회원 도메인 설계 회원 도메인 요구사항 회원을 가입하고 조회할 수 있다. 회원은 일반과 VIP 두 가지 등급이 있다. 회원 데이터는 자체 DB를 구축할 수 있고, 외부 시스템과 연동할 수 있다. (미확정) 회원 도메인 협력 관계 [기획자들도 볼 수 있는 그림] 회원 클래스 다이아그램 [개발자가 구체화한 것] 서버를 실제 실행하지 않고 분석해서 볼 수 있는 그림 회원 클래스 다이아그램 [서버가 켜졌을 때 실제 사용하는 인스턴스끼리의 참조 관계도] 회원 서비스 : MemberServiceImpl