Back-End/Spring

[Spring][스프링 기본편] - 9. AppConfig 리팩토링

얄루몬 2022. 1. 17. 17:39

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만 보고도 구현과 역할을 잘 알아볼 수 있게 된다. 

  • 위와 같이 진행을 하면 우리가 기대하던 그대로 역할과 구현이 설정됨을 알 수 있다.