관심사의 분리

이전 코드를 다시 봅시다.

public class OrderServiceImpl implements OrderService{

    private final MemberRepository memberRepository = new MemoryMemberRepository();
    private final DiscountPolicy discountPolicy = new FixDiscountPolicy();

    ...

}

OrderServiceImpl는 OrderService와 관련된 로직만 해야하는데 FixDiscountPolicy를 직접 선택한 것 입니다.

discountPolicy를 FixDiscountPolicy로 선택하겠다는 굉장히 구체적인 것까지 OrderServiceImpl이 직접 객체를 생성하고 선택까지 해서 discountPolicy에 할당을 했습니다.

마치 배우가 직접 초빙을 하는 것과 마찬가지 입니다. 이전에 작성한 코드가 딱 이런 모양입니다.

그래서 관심사를 분리해야 합니다!

Appconfig 등장

애플리케이션의 전체 동작 방식을 구성(config)하기 위해, 구현 객체를 생성하고, 연결하는 책임을 가지는 별도의 설정 클래스를 만들어야 합니다.