위 예시는 오더 서비스 구현 객체 안에서 MemoryMemberRepository와 RateDiscountPolicy 둘을 직접 생성해 사용하고 있기 때문에 DIP, OCP 위반이다.
이를 해결하기 위해선 외부에서 MemoryMemberRepository와 RateDiscountPolicy를 넣어줘야하는데
아래와 같은 방식이다.
먼저 객체 생성과 주입을 담당해줄 외부 클래스와 메소드를 만들어주고
오더 서비스 구현 객체의 생성자를 통해 외부 클래스에서 생성한 객체들을 파라미터를 통해 넣어주는 로직을 만든다.
이를 통해 오더 서비스 구현 객체는
1. 인터페이스 MemberRepository, DiscountPolicy와만 의존관계를 가진다. (DIP)
2. MemoryMemberRepository, RateDiscountPolicy에 변경점이 있더라도 영향을 받지 않는다. (OCP)
외부 클래스 AppConfing에서 생성한 객체들을 메소드를 통해 주입
한 번에 구조가 파악 되도록 하나 하나
스프링의 경우 개발자가 AppConfig 설정 객체를 직접 생성해서 관리하지 않고
스프링 컨테이너 (ApplicationContext) 를 통해 관리한다.
'Java > Spring' 카테고리의 다른 글
싱글톤 방식 문제점 (0) | 2021.09.10 |
---|---|
스프링 컨테이너 (0) | 2021.09.07 |
OCP, DIP 위반 (0) | 2021.09.03 |
단일 책임 원칙 예시 (0) | 2021.08.31 |
좋은 객체 지향 프로그래밍이란? (0) | 2021.08.28 |