반응형
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
- 스프링부트
- effectivejava
- 알고리즘정렬
- 자바스크립트
- JavaScript
- 티스토리챌린지
- Effective Java 3
- 스프링핵심원리
- Effective Java
- 이펙티브 자바
- Sort
- 카카오 면접
- 김영한
- 코딩테스트
- 클린아키텍처
- kubernetes
- 이차전지관련주
- 오블완
- 카카오
- 이펙티브자바
- 자바
- 엘라스틱서치
- ElasticSearch
- 알고리즘
- Spring
- 스프링 핵심원리
- k8s
- java
- 예제로 배우는 스프링 입문
- 스프링
Archives
- Today
- Total
Kim-Baek 개발자 이야기
[스프링 핵심원리] 14. 새로운 할인 정책 개발 본문
김영한님의 [스프링 핵심 원리] 강의를 정리하고, 내가 생각한 내용까지 정리하는 포스팅
지금까지 할인 정책은 얼마를 주문하던 1000원을 할인해주는 정액 할인 정책이였다. 하지만 맨 처음 기획을 보면 이 정책은 언제든지 바뀔 수 있는 것이였다.
기획자가 이제 1000원이 아니라 주문 금액의 10%를 할인해주는 정률 할인 정책으로 변경해달라는 요구가 들어왔다. 그렇다면 개발자인 우리는 이것을 변경해서 적용해볼 수 있도록 하자 .
기획자는 애자일 소프트웨어 개발 선언에 따라서 계획을 따르기보다는 변화에 대응하라는 말을 한다. 열받는 말이지만 우리도 이 말에 맞게 대응을 해볼 수 있도로 한다.
package core.order.discount;
import core.order.member.Grade;
import core.order.member.Member;
public class RateDiscountPolicy implements DiscountPolicy {
private int discountPercent = 10;
@Override
public int discount(Member member, int price) {
if (member.getGrade() == Grade.VIP) {
return price * discountPercent / 10;
} else {
return 0;
}
}
}
먼저 이전에 할인 정책의 역할로 인터페이스를 만들어두었기 때문에 이를 implement 하는 클래스를 만든다. 그리고 dicount 로직에 10퍼센트를 할인하도록 개발을 한다.
이렇게 한 후에 마찬가지로 junit을 통해서 검증을 하는 과정이 필수적으로 필요하다.
package core.order.discount;
import core.order.member.Grade;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import core.order.member.Member;
import static org.assertj.core.api.Assertions.assertThat;
class RateDiscountPolicyTest {
RateDiscountPolicy discountPolicy = new RateDiscountPolicy();
@Test
@DisplayName("VIP는 10퍼센트 할인이 적용되어야야 한다.")
public void vip_o(){
//given
Member member = new Member(1L, "memberVIP", Grade.VIP);
//when
int discount = discountPolicy.discount(member, 1000);
//then
assertThat(discount).isEqualTo(1000);
}
@Test
@DisplayName("BASIC은 10퍼센트 할인이 적용안되어야 한다.")
public void vip_x(){
//given
Member member = new Member(1L, "memberBASIC", Grade.BASIC);
//when
int discount = discountPolicy.discount(member, 1000);
//then
assertThat(discount).isEqualTo(0);
}
}
VIP일 경우에는 10퍼센트를 할인해주고, BASIC일 경우에는 할인이 되지 않는 테스트를 만들었다. 이렇게 까지하면 정률로 할인하는 정책의 개발은 완료가 된다
그리고 테스트를 만들 때는 항상 성공하는 것 ( 할인 성공 )만 아니라, 할인이 안되는 경우까지 만들어서 전체 케이스를 볼 수 있도록 하는 것이 정말 중요하다.
반응형
'개발 > Spring' 카테고리의 다른 글
[스프링 핵심원리] 16. 관심사의 분리 (0) | 2021.10.07 |
---|---|
[스프링 핵심원리] 15. 새로운 할인 정책 적용과 문제점 (0) | 2021.10.05 |
[스프링 핵심원리] 13. 주문과 할인 도메인 실행과 테스트 (0) | 2021.10.01 |
[스프링 핵심원리] 12. 주문과 할인 도메인 개발 (0) | 2021.10.01 |
[스프링 핵심원리] 11. 주문과 할인 도메인 설계 (0) | 2021.10.01 |
Comments