개발자 공부 - 인프런 온라인 강의/스프링 핵심 원리 - 기본편

[섹션 3. 스프링 핵심 원리 이해2 - 객체 지향 원리 적용] 새로운 할인 정책 개발 / 인프런 김영한 스프링 핵심 원리 기본편

easpop 2023. 2. 16. 17:43
728x90
반응형

이번 시간에는 기존의 코드에 좋은 객체 지향 원리를 적용해보는 시간이었다.

 

기획자가 기존의 1,000원 고정 할인이 아닌, 비율로 할인을 해주는 정률 할인 정책으로 변경을 요청했다고 하자.

 

갑자기 이렇게 할인 정책에 변경 사항이 생긴다고 해도, 문제가 되지 않을 것이다~~

왜냐하면, 유연하게 설계가 가능하도록 객체지향 설계 원칙을 준수했기 때문이다!ㅋㅋㅋ

 

현재 설계를 인터페이스는 DiscountPoilcy로,

구현체는 FixDiscountPolicy로 역할과 구현을 구분해서 설계를 했다.

그렇기 때문에, 변경 사항에 따라 RateDiscountPolicy를 추가로 개발하면 될 것이다~~!

 

discount 패키지안에 RateDiscountPolicy 클래스를 생성해준다.

 

먼저, 인터페이스인 DiscountPolicy를 implements 해준다.

그리고 discountPercent를 10으로 지정해준다.

 

discount 메소드를 재정의 해주면 되는데, if문으로 VIP 등급일 경우에는, 10%할인 적용하여서 리턴,

아니면 0을 리턴해준다.

그리고 테스트 케이스를 만들기 위해서 Ctrl + Shift + T 단축키를 눌러서 테스트 생성~~

 

그리고 그림과 같이 자동으로 생성된 정보 그대로 진행해준다ㅋㅋㅋ

 

RateDiscountPolicy가 10% 할인이 적용되는지 확인하는 것이 목적이기 때문에,

RateDiscountPolicy를 호출해준다.

 

그리고 테스트 메소드를 생성하는데, DisplayName 어노테이션은 아래의 사진과 함께 설명 예정!

19번째 줄에, 등급이 VIP인 member를 생성해준다.

22번째 줄에, discountPolicy.discount 메소드에서 금액을 10,000원을 파라미터로 넣고 나온 결과를 discount 인스턴스로 받아준다.

25번째 줄에 discount 결과가 1000이 맞는지 테스트 코드를 작성한다.

반응형

위의 전체코드에서 세팅한 DisplayName 어노테이션의 결과를

위의 사진과 같이 테스트 결과 창에서 확인할 수 있다.

 

 

주의할 점이 있는데, 테스트 케이스를 만들때는, 물론 성공 테스트 케이스도 만들어야 되지만,

실패 테스트 케이스도 만들어봐야 한다!

다시 말해, VIP가 아닐 경우에는 할인이 적용되지 않는지 테스트도 해봐야 한다는 것이다~~

 

member의 등급을 VIP에서 BASIC으로 수정한 메소드를 만들었다~~

 

테스트가 실패한 것을 확인할 수 있다ㅋㅋㅋ

콘솔에 찍힌 로그를 보면 기대값이 1000인데, 실제는 0이 되었기 때문에 실패가 되었으니,

설계한대로 정상적으로 작동하고 있다는 것을 알 수 있다.

 

Assertions 부분을 0으로 수정하고, 다시 테스트를 돌리면~~

테스트 통과!

 

Assertions는 자주 쓰일 예정이니, Alt + Enter를 누르고 static import를 진행해준다!

 

static import를 한 이후에는 위와 같이 asserThat으로 호출이 가능해진다!

728x90
반응형