<현재 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를 보면 역할과 구현 클래스가 한 눈에 들어온다.