스프링(Spring)/Spring
[Spring] AppConfig 리팩토링
Trillium
2022. 7. 29. 17:58
현재 만들어 놓은 AppConfig를 보면 중복이 있고, 역할에 따른 구현이 잘 보이지 않는다.
이를 수정해보자.
package hello.core;
import hello.core.discount.FixDiscountPolicy;
import hello.core.discount.DiscountPolicy;
import hello.core.member.MemberService;
import hello.core.member.MemberServiceImpl;
import hello.core.member.MemoryMemberRepository;
import hello.core.member.MemberRepository;
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());
}
private DiscountPolicy discountPolicy() {
return new FixDiscountPolicy();
}
}
위와 같이 변경해주면,
메서드 명만 봐도 역할이 모두 드러나고(알 수 있고), 추후에 수정할 때, return 부분만 수정해주면 된다.
기존의 new MemoryMemberRepository() 부분의 중복이 제거되었고, memberRepository 메서드를 통해 다른 구현체로 변경할 때 한 부분(return)만 변경해주면 된다.
또한, discountPolicy() 를 보면 어떤 할인 정책을 사용하고 있는지 한 번에 확인할 수 있으므로, 전체 구성이 어떻게 되어있는지 빠르게 파악할 수 있다.