AppConfig 리팩터링

myeonji·2022년 2월 20일
0

Spring

목록 보기
17/22

<현재 AppConfig>

public class AppConfig {

    // 구현 클래스 선택해서 주입해주기
    public MemberService memberService() {
        return new MemberServiceImpl(new MemoryMemberRepository());
    }

    // 구현 클래스 선택해서 주입해주기
    public OrderService orderService() {
        return new OrderServiceImpl(new MemoryMemberRepository(), new FixDiscountPolicy());
    }
}
  • 문제점 : 중복이 있고, 역할에 따른 구현이 한눈에 보이지 않음

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();
    }
}

리팩터링(Ctrl + Alt + M)을 했더니,
MemberService 역할, MemberRepository 역할, OrderService 역할, DiscountPolicy 역할 이 잘 드러난다.

-> 다시 말해서, new MemoryMemberRepository() 부분의 중복이 제거되었다.
이제 MemoryMemberRepository를 다른 구현체로 변경할 때는 한 부분만 변경하면 된다.
또한 AppConfig를 보면 역할과 구현 클래스가 한 눈에 들어온다.

💡 AppConfig의 등장으로 애플리케이션이 크게 "사용영역"과 "객체를 생성하고 구성하는 영역"으로 분리되었다.

0개의 댓글