녕의 학습 기록

[Spring 기본] 객체 지향 원리 적용 (1) 본문

Dev/Spring

[Spring 기본] 객체 지향 원리 적용 (1)

kjyyjk 2022. 10. 30. 02:05

 학습 내용 

 

개발한 코드에서 구현체 변경(고정할인 → 정률 할인)

즉, 객체 지향적으로 잘 개발했는지 확인


* 새로운 할인 정책 테스트

 

정률할인정책으로 변경하기 위해 RateDiscountPolicy를 새로 만들고 테스트 실행

 

테스트 실행

 

- @DisplayName 애너테이션을 이용하면 테스트를 한글 이름으로 표시할 수 있다.

 

- on demand static import를 이용하면 아래  코드블럭 내에 두번째 코드처럼 더욱 간결히 가능

Assertions.asserThat(discount).isEqualTo(0);

assertThat(discount).isEqualTo(0);

- 테스트는 실패 확인용 테스트도 꼭 만들어봐야 한다

 

 

* 새로운 정책 적용의 문제점

 

클라이언트인 OrderServiceImpl

 

할인 정책 구현체를 바꾸려면 사진과 같이 직접 수정해주어야 한다

 

문제점

 

1. 추상(인터페이스)뿐만 아니라 구현 클래스에도 의존하고 있다 DIP 위반

 

2. 기능을 확장 변경하면 클라이언트 코드에 영향을 준다 OCP 위반

 

 

* 문제 해결 방안

 

간단하게 생각하면 DIP를 위반하지 않도록 구체 클래스를 지워버리면, 인터페이스에만 의존한다

 

구현 클래스 제거

인터페이스에만 의존

 

하지만 구현체가 없어서 실행 시 돌아가지 않는다 ( Null Pointer Exception 발생 )

 

따라서 누군가가 클라이언트(OrderServiceImpl)에 구현 객체를 대신 생성하고 주입해주어야 한다.


 다음 학습 내용 

 

구현체가 없어 실행되지 않는 상황 해결

 

 

스프링 핵심 원리 - 기본편 - 인프런 | 강의

스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., - 강의 소개 | 인프런...

www.inflearn.com