1- 강의 노트
- AppConfig의 등장으로 애플리케이션의 사용 영역과 객체를 생성하고 구성(configuration)하는 영역이 분리됨
- 만약 적용되는 할인 정책이 변경된다면, 클라이언트 코드 영역은 변경할 필요 없이 AppConfig만 수정하면됨
- 구성 영역은 당연히 변경됨. 세부적인 내용이 바뀔 수 있기 때문임.
2- 변경 예시
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;
/**
* Application 전체를 구성하고 설정하는 역할
* - 로미오 줄리엣 공연 예시 중 기획자
* - 어플리케이션에 대한 환경 구성을 모두 이곳에서 함
*/
public class AppConfig {
// 생성자 주입: 생성자를 통해서 객체가 주입되는 것
// 중복된 코드 잡아주는 단축키 (맥 기준) : 옵션 + 커맨드 + M
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();
}
}
- 정액법에서 정율법으로 바꾼거 예시
3- 토탈 코드
- 현재까지 전체 코드를 보면 OCP와 DIP를 모두 준수해 클라이언트 코드에서 변경은 불필요해짐
https://github.com/Jeong-sky-1003/core.git
'Development > Spring Boot' 카테고리의 다른 글
[Spring Boot] 스프링 부트로 전환하기 (0) | 2022.08.09 |
---|---|
[Spring Boot] IoC, DI, 컨테이너 (0) | 2022.08.05 |
[Spring Boot] AppConfig 리팩토링 (0) | 2022.08.04 |
[Spring Boot] 스프링 핵심 원리 이해 - 객체 지향 원리 적용 (1) 관심사의 분리 (0) | 2022.08.02 |
[Spring Boot] 주문과 할인 도메인 설계 (3-1) 주문과 할인 도메인 개발 (0) | 2022.08.01 |