앞서 생성한 OrderServiceImpl 클래스를 잠깐 살펴보자. 이 클래스는 주문 서비스에만 관련된 로직만을 수행해야 하는데, 이 안에서 private DiscountPolicy discountPolicy = new FixDiscountPolicy(); 구문을 통해 할인 정책 객체를 직접 생성을 하고 "FixDiscountPolicy"(구체적인 정책) 또한 사용하겠다고 직접 선택하게 된다. 즉, 클래스의 역할만 수행하는 것에 집중이 되어야한다. 이를 위해 애플리케이션의 전체적인 동작 방식을 구성하기 위해, 구현 객체를 생성하고 연결하는 책임을 가지는 별도의 설정 클래스를 만들어 줄 것이다. Appconfig 애플리케이션의 운영에 대한 전반적인 부분을 책임지는 매우 중요한 클래스이다. hello.cor..
앞서 만들었던 예제 1에 새로운 할인 정책을 개발하고 적용시켜 보자 새로운 할인 정책을 확장해보자. 한 기획자가 서비스 오픈 직전에 할인 정책을 지금처럼 고정 할인이 아니라 좀 더 합리적인 주문 금액당 할인하는 정률% 할인으로 변경하고 싶다고 요청했다. 이전 개발이 정말 객체 지향 설계 원칙을 잘 준수했는지 확인해보자. 이번에는 주문한 금액의 일정%를 할인해주는 정률 할인 정책을 추가할 것이다. 새로운 할인 정책 개발 RateDiscountPolicy 추가 discount 패키지에 RateDiscountPolicy 클래스를 추가한다. package hello.core.discount; import hello.core.member.Grade; import hello.core.member.Member; pu..
주문과 할인 도메인을 설계하고 개발해보자. 주문과 할인 도메인 설계 이전에 설계했던 주문, 할인 정책을 다시 살펴보면, 회원은 상품을 주문할 수 있다. 회원 등급에 따라 할인 정책을 적용할 수 있다. 할인 정책은 모든 VIP는 1000원을 할인해주는 고정 금액 할인을 적용한다.(나중에 변경될 수 있다) 할인 정책은 변경 가능성이 높다. 회사의 기본 할인 정책을 아직 정하지 못했고, 오픈 직전까지 고민을 미루고 싶다. 최악의 경우 할인을 적용하지 않을 수도 있다.(미확정) 위 내용을 다이어그램으로 나타내면 다음과 같다. 주문 생성 : 클라이언트(main 메서드, 스프링 mvc의 경우 컨트롤러...)는 주문 서비스에 주문 생성을 요청한다. 회원 조회 : 할인을 위해서는 회원 등급이 필요하기 때문에 주문 서비..
이전 포스팅에서 만든 회원 도메인이 정상적으로 동작하는지 실행하고 테스트해보자. 이전 포스팅의 "회원 객체 다이어그램"에 해당하는 작업이다. 앞서 설명했지만, 클래스 다이어그램은 정적인 것이고 객체 다이어그램은 동적인 것이다. 회원 도메인 실행과 테스트 회원 도메인 회원 가입 main hello.core 아래 MemberApp 클래스를 하나 생성하자. package hello.core; import hello.core.member.Grade; import hello.core.member.Member; import hello.core.member.MemberService; import hello.core.member.MemberServiceImpl; public class MemberApp { public..
이전 포스팅에서 프로젝트 환경을 만들었고 이제 실제로 역할과 구현을 나누어 간단하게 설계를 해보자. 비즈니스 요구사항과 설계 회원 회원가입을 하고 조회할 수 있다. 회원은 일반과 VIP 두 가지 등급이 있다. 회원 데이터는 자체 DB를 구축할 수 있고, 외부 시스템과 연동할 수 있다.(이 기능은 결정이 되지 않은 상태) 주문과 할인 정책 회원은 상품을 주문할 수 있다. 회원 등급에 따라 할인 정책을 적용할 수 있다. 할인 정책은 모든 VIP는 1000원을 할인해주는 고정 금액 할인을 적용한다.(나중에 변경될 수 있다) 할인 정책은 변경 가능성이 높다. 회사의 기본 할인 정책을 아직 정하지 못했고, 오픈 직전까지 고민을 미루고 싶다. 최악의 경우 할인을 적용하지 않을 수도 있다.(미확정) 위 요구사항을 살..
앞서 배운 대로 역할과 구현 즉, 인터페이스와 구현 객체로 나누어 하나의 예제를 개발할 것인데, 스프링의 도움 없이 순수한 자바만을 사용하여 개발을 할 것이다. 이를 통해 추후에 실제 요구사항의 변화가 발생했을 때, 정말 유연하게 대처가 가능한가 와 다형성, OCP, DIP가 잘 지켜졌는지를 확인하고 문제가 있다면 다음 포스팅에서 객체 지향의 원리를 적용하여 해결해 나가 보자. 목차는 다음과 같다. 프로젝트 생성 비즈니스 요구사항과 설계 회원 도메인 설계 회원 도메인 개발 회원 도메인 실행과 테스트 주문과 할인 도메인 설계 주문과 할인 도메인 개발 주문과 할인 도메인 실행과 테스트 프로젝트 생성 이번 프로젝트는 순수한 자바만을 사용하지만, 프로젝트를 Setting 할 때는 편의를 위해 스프링 부트를 사용..