** 공유가 아닌 개인 공부에 목적을 둔 글입니다
** 설명이 불충분할 수 있으며 잘 정리된 글이 아닐 수도 있습니다
이전에 공부했던 DI 를 이번에는 예제로써 이해도를 높였다
2021.08.28 - [Spring] - [Spring] DI : Dependency Injection
위 코드에서 MemberRepository 나 FixDiscountPolicy 를 다른 저장소 혹은 다른 할인 정책으로 바꾸기 원한다면
아래와 같이 OrderServiceImpl 클라이언트의 코드를 변경하는 것이 불가피하다 = OCP 위반
즉, OrderServiceImpl 클라이언트가 MemberRepository 인터페이스에만 의존하는 것이 아니라
MemberRepository 인터페이스와 MemoryMemberRepository 클래스 둘 다에 의존하고 있으며,
DiscountPolicy 인터페이스와 FixDiscountPolicy 도 마찬가지이다 = DIP 위반
우선 인터페이스만을 의존하게 코드를 수정하고 생성자를 만들어주자 = DIP 준수
이제 클라이언트에 존재하지 않는 구현객체를 만들어주기 위해
인터페이스의 구현객체를 생성하고 연결하면서 관리해 줄 AppConfig 클래스를 따로 만든다
OrderService 메소드를 통해 OrderServiceImpl 을 생성 및 리턴하면서 MemoryMemberRepository, FixDiscountPolicy 를
생성해 파라미터로 넘겨준다
이렇게 하면 변경사항이 생겼을 때 직접 클라이언트 클래스를 건드리지 않고 AppConfig 클래스만으로
변경사항을 반영할 수 있다 = OCP 준수
같은 방식으로 MemberServiceImpl 도 수정해주자
'Java' 카테고리의 다른 글
[Java] 기술면접 (0) | 2024.04.03 |
---|---|
[Java] Collections(2-1)_Map 반복문 도는 여러방식 (0) | 2021.11.03 |
[Java] DTO (Data transfer Object) 란? (0) | 2021.09.13 |
[Java] StringTokenizer (0) | 2021.08.26 |
[Java] Collections(2)_Map 인터페이스 (0) | 2021.08.24 |