1. AppConfig의 Refactoring의 목적
- 중복의 제거
- 역할에 따른 구현이 더욱 명확하게 보이게 하기 위해서 AppConfig를 Refactoring해주는 작업을 진행한다.
<Refactoring 진행 전>
package hello.core;
import hello.core.discount.FixDiscountPolicy;
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(new MemoryMemberRepository());
}
public OrderService orderService(){
return new OrderServiceImpl(new MemoryMemberRepository(),new FixDiscountPolicy());
}
}
<Refactoring 진행 후>
package hello.core;
import hello.core.discount.DiscountPolicy;
import hello.core.discount.FixDiscountPolicy;
import hello.core.member.MemberRepository;
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 MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
public OrderService orderService(){
return new OrderServiceImpl(memberRepository(),discountPolicy());
}
public DiscountPolicy discountPolicy(){
return new FixDiscountPolicy();
}
}
2. Refactoring 진행 후의 상황
- 설계에 대한 그림이 구성정보에 그대로 나드러나야 한다.
- 중복이 제거가 되면 구현체를 다른 구현체로 바꿔야 하는 상황이 왔을 때 한 부분만 변경해주면 되기에 매우 편해진다.
- 역할에 따른 구현이 잘보이도록 위와 같이 Refactoring 해주면 AppConfig만 보고도 구현과 역할을 잘 알아볼 수 있게 된다.
- 위와 같이 진행을 하면 우리가 기대하던 그대로 역할과 구현이 설정됨을 알 수 있다.
'Back-End > Spring' 카테고리의 다른 글
[Spring][스프링 기본편] - 11. 스프링 컨테이너 생성과 스프링 빈 조회하기 (0) | 2022.01.23 |
---|---|
[Spring][스프링 기본편] - 10.IOC, DI, 그리고 컨테이너 (0) | 2022.01.20 |
[Spring][스프링 기본편] - 8. 의존관계 주입, 의존성 주입 (0) | 2022.01.15 |
[Spring][스프링 기본편] - 7. DIP OCP 위반과 NPE (0) | 2022.01.15 |
[Spring][스프링 기본편] - 6. 주문과 할인 도메인 개발과 테스트 (0) | 2022.01.13 |