AppConfig
가 등장하면서 구성을 변경하기 위해 내부의 코드를 수정하지 않아도 된다.
사용 영역과 구성 영역으로 분리되었다.
구성한다는 의미는 인터페이스의 구현체들 중 어느 것을 선택할지에 대한 의미
public class AppConfig {
public DiscountPolicy discountPolicy(){
return new RateDiscountPolicy();
}
public MemberRepository memberRepository(){
return new MemoryMemberRepository();
}
public MemberService memberService(){
return new MemberServiceImpl(memberRepository());
}
public OrderService orderService(){
return new OrderServiceImpl(memberRepository(), discountPolicy());
}
}
이 상태에서 RateDiscountPolicy
를 FixDiscountPolicy
로 변경하게 되어도 사용역역의 코드를 수정하지 않아도 된다.
Appconfig
는 모든 구현체를 알고 있어야 한다.
또한 객체들은 의존하는 대상의 인터페이스만 알면 되기 때문에 구현체의 변경에 영향을 받지 않는다.