본문 바로가기
오답노트

스프링 핵심원리 - 기본편 AppConfig 리팩터링

by titlejjk 2023. 7. 11.
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 static MemberRepository memberRepository() {
        return new MemoryMemberRepository();
    }

    public OrderService orderService(){
        return new OrderServiceImpl(
                memberRepository(), discountPolicy());
    }

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

 

위에 코드를 정리하자면

MemberService, OrderService에서 memberRepository와 discountPolicy 인터페이스에 의존하고 있으며,

memberRepository는 MemoryMemberRepository 구현 클래스를

dicountPolicy는 FixDiscountPolicy를 구현 클래스로 사용하고 있다는 의미 이다.

 

댓글