🍀 [ 김영한 스프링 핵심 원리 - 기본편 ] Section03. 스프링 핵심 원리 이해1 - 예제 만들기

2025. 1. 16. 23:24개발/🍃 Spring

 

 

 

[ 예제 설명 ]

회원
-  회원 가입, 조회
-  등급 : VIP, BASIC
-  자체 DB 구축 가능, 외부 시스템과 연동 가능

주문과 할인 정책
-  상품 주문
-  할인 정책 : 고정 금액(1000원) 할인 / 할인율 적용
-  할인 정책은 변경 가능성 높음

 

 

[ 구조 ]

회원 도메인 협력 관계, 회원 클래스 다이어그램, 회원 객체 다이어그램

비즈니스 요구 사항들을 분석하면서 도메인별로 필요한 역할들을 정리하고

다이어그램들을 통해서 도메인과 클래스 구조를 확립했다

 

 

[ 코드 ]

 

다형성 살려서 개발

MemberService -> MemberServiceImpl

OrderService -> OrderServiceImpl

DiscountPolicy -> FixDiscountPolicy, RateDiscountPolicy

:  역할과 구현을 분리

:  구현 방식에 변화가 생겼을 때 구현체만 갈아끼우면 됨

 

문제점

DiscountPolicy discountPolicy = new FixDiscountPolicy();

 

1 )  OCP 파괴

:  결국은 클라이언트 코드에서 할인 정책 구현체(FixDiscountPolicy)를 직접 사용하고 있기 때문에

수정이 발생했을 때(PercentDiscountPolicy 적용하고자 할 때) 클라이언트 코드를 직접 수정해야 한다

즉, "수정에 폐쇄적이어야 한다"는 OCP 원칙을 지키지 못한 것이다 

 

2 )  DIP 파괴

:  구현체가 아닌 인터페이스를 생성해야 하나, 위 코드에서 볼 수 있듯이 구현체인 FixDiscountPolicy를 생성하고 있다