[Spring] AppConfig 리팩토링

현재 만들어 놓은 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() 를 보면 어떤 할인 정책을 사용하고 있는지 한 번에 확인할 수 있으므로, 전체 구성이 어떻게 되어있는지 빠르게 파악할 수 있다.