일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Flutter
- spring
- php 프로그래밍 입문 예제
- 백준
- 스프링
- php 프로그래밍 입문
- 최단 경로
- 자바 스프링
- php 프로그래밍 입문 3판
- 플러터
- 페이코 추천인
- 한정 분기
- 페이코 친구코드
- JAVA SPRING
- 페이코 초대코드
- php 프로그래밍 입문 연습문제
- 배열
- C
- php
- 플러터 개발환경 설정
- php 프로그래밍 입문 솔루션
- Java
- programmers
- 페이코 추천인코드
- 파이썬
- C언어
- php 프로그래밍 입문 문제풀이
- 자바
- SWEA
- php 프로그래밍
Archives
- Today
- Total
11-08 00:02
ImJay
[Java Spring] 2-19. 새로운 구조와 할인 정책 적용 본문
반응형
[Java Spring] 2-19. 새로운 구조와 할인 정책 적용
1. 처음으로 돌아가서 정액 할인 정책을 정률% 할인 정책으로 변경해보자.
- FixDiscountPolicy -> RateDiscountPolicy
- 어떤 부분만 변경하면 되겠는가?
2. AppConfig의 등장으로 애플리케이션이 크게 사용 영역과, 객체를 생성하고 구성(Configuration)하는 영역으로 분리되었다.
3. 그림 - 사용, 구성의 분리
4. 그림 - 할인 정책의 변경
FixDiscountPolicy RateDiscountPolicy 로 변경해도 구성 영역만 영향을 받고, 사용 영역은 전혀 영향을 받지 않는다.
5. 할인 정책 변경 구성 코드
AppConfig 를 다음과 같이 수정한다.
package hello.core;
import hello.core.discount.DiscountPolicy;
import hello.core.discount.FixDiscountPolicy;
import hello.core.discount.RateDiscountPolicy;
import hello.core.member.MemberService;
import hello.core.member.MemberServiceImpl;
import hello.core.member.MemoryMemberRepository;
import hello.core.order.OrderService;
import hello.core.order.OrderServiceImpl;
public class AppConfig {
public MemberService memberService() {
return new MemberServiceImpl(memberRepository());
}
private MemoryMemberRepository memberRepository() {
return new MemoryMemberRepository();
}
public OrderService orderService() {
return new OrderServiceImpl(memberRepository(), discountPolicy());
}
public DiscountPolicy discountPolicy() {
// return new FixDiscountPolicy();
return new RateDiscountPolicy();
}
}
금액을 10000 으로 설정하면 고정할인과 동일한 금액이 나오기 때문에, 테스트 금액도 20000으로 수정하자.
OrderApp 을 다음과 같이 수정한다.
package hello.core;
import hello.core.member.Grade;
import hello.core.member.Member;
import hello.core.member.MemberService;
import hello.core.member.MemberServiceImpl;
import hello.core.order.Order;
import hello.core.order.OrderService;
import hello.core.order.OrderServiceImpl;
public class OrderApp {
public static void main(String[] args) {
AppConfig appConfig = new AppConfig();
MemberService memberService = appConfig.memberService();
OrderService orderService = appConfig.orderService();
// MemberService memberService = new MemberServiceImpl();
// OrderService orderService = new OrderServiceImpl();
Long memberId = 1L;
Member member = new Member(memberId, "memberA", Grade.VIP);
memberService.join(member);
Order order = orderService.createOrder(memberId, "itemA", 20000);
System.out.println("order = " + order);
}
}
6. 빌드
정률 할인 정책이 정상적으로 적용되었음을 확인할 수 있다.
7. 정리
- AppConfig 에서 할인 정책 역할을 담당하는 구현을 FixDiscountPolicy RateDiscountPolicy 객체로 변경했다.
- 이제 할인 정책을 변경해도, 애플리케이션의 구성 역할을 담당하는 AppConfig만 변경하면 된다. 클라이언트 코드인 OrderServiceImpl 를 포함해서 사용 영역의 어떤 코드도 변경할 필요가 없다.
- 구성 영역은 당연히 변경된다. 구성 역할을 담당하는 AppConfig를 애플리케이션이라는 공연의 기획자로 생각하자. 공연 기획자는 공연 참여자인 구현 객체들을 모두 알아야 한다.
반응형
'Java Spring > 스프링 핵심 원리 - 기본편' 카테고리의 다른 글
[Java Spring] 2-21. 좋은 객체 지향 설계의 5가지 원칙의 적용 (0) | 2023.02.28 |
---|---|
[Java Spring] 2-20. 전체 흐름 정리 (0) | 2023.02.28 |
[Java Spring] 2-18. AppConfig 리팩터링 (0) | 2023.02.28 |
[Java Spring] 2-17. 관심사의 분리 (0) | 2023.02.28 |
[Java Spring] 2-16. 새로운 할인 정책 적용과 문제점 (0) | 2023.02.28 |
Comments