[Spring-기본] AppConfig 리팩토링

DANI·2023년 11월 22일

Spring[김영한T]

목록 보기
16/31
post-thumbnail

현재 AppConfig 파일엔 중복되는 인터페이스가 많다.
리팩토링을 통해서 코드를 명확하게 하자!


💾 현재 AppConfig 파일

package hello.core;


import hello.core.Discount.RateDiscountPolicy;
import hello.core.Order.OrderService;
import hello.core.Order.OrderServiceImpl;
import hello.core.member.MemberRepository;
import hello.core.member.MemberService;
import hello.core.member.MemberServiceImpl;
import hello.core.member.MemoryMemberRepository;


public class AppConfig {


    
    public OrderService OrderService(){
        return new OrderServiceImpl(new MemoryMemberRepository(), new RateDiscountPolicy());
    }

 
    public MemberService MemberService(){
        return new MemberServiceImpl(new MemoryMemberRepository());
    }
}

new MemoryMemberRepository() 가 중복되고 있다.




리팩토링

💾 AppConfig 파일 수정

package hello.core;


import hello.core.Discount.DiscountPolicy;
import hello.core.Discount.RateDiscountPolicy;
import hello.core.Order.OrderService;
import hello.core.Order.OrderServiceImpl;
import hello.core.member.MemberRepository;
import hello.core.member.MemberService;
import hello.core.member.MemberServiceImpl;
import hello.core.member.MemoryMemberRepository;


public class AppConfig {

    public OrderService orderService(){
        // return new OrderServiceImpl(new MemoryMemberRepository(), new RateDiscountPolicy());
        return new OrderServiceImpl(memberRepository(), discountPolicy());
    }
    public MemberRepository memberRepository(){
        return new MemoryMemberRepository();
    }

    public DiscountPolicy discountPolicy(){
        return new RateDiscountPolicy();
    }

    public MemberService memberService(){
       // return new MemberServiceImpl(new MemoryMemberRepository());
        return new MemberServiceImpl(memberRepository());
    }
}


중복을 없애고 구현체를 쉽게 바꿀 수 있도록 코드를 수정하였다.
만약, 할인정책에서 Fixed로 바꾸고 싶을땐 discountPolicy()의 리턴값만 수정하면되고,
추후에 외부 DB로 바뀔 땐 memberRepository()의 리턴값만 수정하면 된다.

0개의 댓글