Client
가 관심사를 2개 가지고 있음
PaymentService
가 다른 클래스 오브젝트와 어떻게 관계를 맺어야 할지의 책임PaymentService
를 이용해서 업무를 수행하는 책임관심사를 다른 클래스로 넘기면 됨
Client
는 PaymentService
를 이용해서 작업을 하는데 충실한 코드로 구성PaymentService
를 사용하기 위해서 준비를 시키려면 ObjectFactory
를 사용
ObjectFactory
를 사용해서 PaymentService
가 사용할 PaymentService
를 얻어옴⇒ 런타임 오브젝트 사이에 의존관계를 설정하는 책임을 ObjectFactory에서 넘기자
ObjectFactory
는 현재 메서드 하나 안에 PaymentService
오브젝트도 만들고, ExRateProvider
인터페이스를 구현한 오브젝트도 만드는 2가지 관심사가 합쳐져 있음
이와 같이 변경하게 되면 exRateProvider
의 구현 클래스를 변경하고 싶은 경우 빠르게 찾아갈 수 있음
메서드의 이름이 분명하기 때문
각각의 오브젝트를 만드는 2개의 메서드로 분리 후
필요한 경우 메서드를 호출하여 오브젝트를 가져와 생성자에 주입하는 방식을 사용