리팩터링 전
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();
}
// 메모리 기반의 회원 저장소 객체를 생성한다. 이 메서드는 private이므로 클래스 내부에서만 사용된다.
public OrderService orderService() {
return new OrderServiceImpl(memberRepository(), discountPolicy());
}
// 주문 서비스 객체를 생성하고, 회원 저장소와 할인 정책을 의존성으로 주입한다.
public DiscountPolicy discountPolicy() {
return 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();
return new RateDiscountPolicy();