Spring

Spring / 예제에 객체 지향 원리 적용

Dear-J 2025. 3. 23. 03:37

새로운 할인 정책 개발

정률 할인 정책 : 10%로 지정

 

새로운 할인 정책 적용과 문제점

할인 정책을 고정에서 정률로 변경하려면

>> 클라이언트인 OrderServiceImpl 코드를 고쳐야 함

 

역할과 구현을 분리 : Good

다형성 활용, 인터페이스와 구현 객체 분리 : Good

DIP : 주문서비스 클라이언트가 인터페이스에 의존하면서 DIP를 지킨 것 같지만

>> 추상(인터페이스) 뿐만 아니라 구체(구현)  클래스에도 의존

OCP : 위반

>> 기능을 확장해서 변경하면 클라이언트 코드에 영향을 줌

 

해결을 위해

인터페이스에만  의존하도록 코드 변경

하지만 구현체가 없는데 어떻게 코드 실행?

>> NPE(Null Pointer Exception) 발생

 

누군가가 클라이언트인 OrderServiceImpl에 DiscountPolicy의 구현 객체를

>> 대신 생성하고 주입해주어야 함

 

AppConfig 등장

구현 객체를 생성하고 연결하는 별도의 설정 클래스

 

MemberServiceImpl은 MemoryMemberRepository를 의존하지 않고 MemberRepository 인터페이스만 의존

생성자를 통해 어떤 구현 객체가 주입될지 알 수 없음

>> 오직 외부(AppConfig)에서 결정

MemberServiceImple은 이제 의존관계에 대한 고민은 외부에 맡기고 실행에만 집중

 

클래스 다이어그램

객체의 생성과 연결은  AppConfig가 담당

DIP 완성 : MemberServiceImpl은 추상에만 의존, 구체 클래스 몰라도 됨

관심사의 분리 : 객체를 생성하고 연겨하는 역할과 실행하는 역할이 명확히 분리

 

회원 객체 인스턴스 다이어그램

appConfig 객체는  memoryMemberRepository 객체를 생성하고

>> 참조값을 memberServiceImpl을 생성하면서 생성자로 전달

 

클라이언트 입장에서 의존관계를 마치 외부에서 주입해주는 것 같음

>> DI(Dependency Injection) 의존관계 주입, 의존성 주입

 

AppConfig 리팩토링

현재 중복이 있고, 역할에 따른 구현이 잘 안보임

애플리케이션 전체 구성이 어떻게 되어있는지 빠르게 파악 가능

 

새로운 구조와 할인 정책 적용

AppConfig의 등장으로 애플리케이션이

>> 사용 영역과 객체를 생성하고 구성하는 영역으로 분리

 

할인 정책을 변경해도 구성 역할을 담당하는 AppConfig만 변경하면 됨

 

 

 

 

 

출처 : 김영한, 스프링 핵심 원리 - 기본편

'Spring' 카테고리의 다른 글

Spring / 싱글톤 컨테이너  (0) 2025.03.23
Spring / 스프링 컨테이너와 빈  (0) 2025.03.23
Spring / 비즈니스 요구사항 예제  (0) 2025.03.22
Spring / 객체 지향 설계와 스프링  (0) 2025.03.21
Spring / AOP  (0) 2025.03.19