Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 알고리즘
- 스프링 핵심 원리
- Spring Boot
- 인프런
- 자바
- 백준
- kotlin
- Thymeleaf
- 그리디
- db
- Proxy
- transaction
- JPQL
- java
- http
- Servlet
- spring
- AOP
- springdatajpa
- 스프링
- JDBC
- QueryDSL
- SpringBoot
- Greedy
- pointcut
- Android
- 스프링 핵심 기능
- 김영한
- jpa
- Exception
Archives
- Today
- Total
개발자되기 프로젝트
정책 변경, DIP & OCP 위반 본문
https://github.com/bsh6463/SpringCoreFunction1. 정책 변경
- 할인 정책을 바꾸기 위해서는 DiscountPolicy의 구현체를 바꿔줘야 한다.
- OrderServiceImpl은 현재 FixDiscountPolicy를 의존하고 있다.
- FixDiscountPolicy를 RateDiscountPolicy로 변경
- 하지만 할인 정책을 바꾸기 위해서는 클라이언트인 OrderServiceImpl의 코드를 변경해야 한다.
- OCP, DIP를 위반한다!
- DIP : DiscountPolicy 인터페이스 뿐 만 아니라 구체적은 클래스도 의존하고 있다.
- OCP : 변경에 닫혀있지 않다. 기능을 확장하기 위해서 클라이언트 코드 변경이 필요하다. - 즉, FixDiscountPolicy --> RateDiscountPolicy 변경을 하는 순간 DIP 위반!
- 역할, 구현 도 구분했고... interface도 썼고...다 한줄 알았는데 ..
- 근데 구체 클래스 써야하는데 어떻게 해야하냐고...!!!!! 도움!
2. DIP, OCP위반 문제 해결
- 원인 : 클라이언트에서 인터페이스와 구체 클래스 함께 의존함
- 해결 : 인터페이스에만 의존하도록 변경
- 하지만 이렇게 하면 구체 클래스 사용이 불가능하다.. ㅋㅋㅋㅋㅋ NPE날텐데..
Null에 .찎으면 NPE난다 ㅋㅋㅋㅋ ex) Null.findById().... - 그렇다면 OrderService외부에서 구체 클래스를 생성하고 생성자를 통해 OrderService에 주입을 해줘야 할 것 같다.
3. GitHub : 210725, RateDiscountPolicy
'인프런 > [인프런] Spring 핵심원리 이해' 카테고리의 다른 글
Appconfig 리팩터링 (0) | 2021.07.25 |
---|---|
관심사의 분리 (0) | 2021.07.25 |
새로운 할인 정책 개발 (0) | 2021.07.25 |
주문, 할인 도메인 개발 & Test (0) | 2021.07.25 |
주문, 할인 도메인 설계 (0) | 2021.07.25 |
Comments