일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- php 프로그래밍 입문
- 스프링
- SWEA
- 배열
- php 프로그래밍 입문 연습문제
- php
- Flutter
- programmers
- 자바
- 플러터
- 자바 스프링
- php 프로그래밍
- spring
- 한정 분기
- 파이썬
- C언어
- 페이코 추천인
- 페이코 추천인코드
- php 프로그래밍 입문 3판
- 페이코 초대코드
- 페이코 친구코드
- C
- php 프로그래밍 입문 문제풀이
- 최단 경로
- php 프로그래밍 입문 예제
- 플러터 개발환경 설정
- JAVA SPRING
- 백준
- Java
- php 프로그래밍 입문 솔루션
- Today
- Total
ImJay
[Java Spring] 2-15. 새로운 할인 정책 개발 본문
[Java Spring] 2-15. 새로운 할인 정책 개발
1. 새로운 할인 정책을 확장해보자.
- 악덕 기획자: 서비스 오픈 직전에 할인 정책을 지금처럼 고정 금액 할인이 아니라 좀 더 합리적인 주문 금액당 할인하는 정률% 할인으로 변경하고 싶어요. 예를 들어서 기존 정책은 VIP가 10000원을 주문하든 20000원을 주문하든 항상 1000원을 할인했는데, 이번에 새로 나온 정책은 10%로 지정해두면 고객이 10000원 주문시 1000원을 할인해주고, 20000원 주문시에 2000원을 할인해주는 거에요!
- 순진 개발자: 제가 처음부터 고정 금액 할인은 아니라고 했잖아요.
- 악덕 기획자: 애자일 소프트웨어 개발 선언 몰라요? “계획을 따르기보다 변화에 대응하기를”
- 순진 개발자: … (하지만 난 유연한 설계가 가능하도록 객체지향 설계 원칙을 준수했지 후후)
- 참고: 애자일 소프트웨어 개발 선언
- 순진 개발자가 정말 객체지향 설계 원칙을 잘 준수 했는지 확인해보자. 이번에는 주문한 금액의 %를 할인해주는 새로운 정률 할인 정책을 추가하자.
2. RateDiscountPolicy 추가
3. main > java > hello.core > discount > RateDiscountPolicy 클래스 생성
4. 코드 작성
package hello.core.discount;
import hello.core.member.Grade;
import hello.core.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 / 100;
} else {
return 0;
}
}
}
5. 작성한 RateDiscountPolicy 클래스에 CTRL + SHIFT + T 단축키를 눌러보자
- 그대로 확인 누르기
6. 코드 작성
package hello.core.discount;
import hello.core.member.Grade;
import hello.core.member.Member;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class RateDiscountPolicyTest {
RateDiscountPolicy discountPolicy = new RateDiscountPolicy();
@Test
@DisplayName("VIP는 10% 할인이 적용되어야 한다")
void vip_o() {
//given
Member member = new Member(1L, "memberVIP", Grade.VIP);
//when
int discount = discountPolicy.discount(member, 10000);
//then
Assertions.assertThat(discount).isEqualTo(1000);
}
@Test
@DisplayName("VIP가 아니면 할인이 적용되지 않아야 한다")
void vip_x() {
//given
Member member = new Member(2L, "memberBASIC", Grade.BASIC);
//when
int discount = discountPolicy.discount(member, 10000);
//then
Assertions.assertThat(discount).isEqualTo(1000);
}
}
7. 빌드
- VIP가 아니면 할인이 적용되어서는 안된다. 따라서 정상적으로 로직이 작동함을 확인할 수 있다.
8. 테스트 코드 수정
// Assertions.assertThat(discount).isEqualTo(1000);
Assertions.assertThat(discount).isEqualTo(0);
9. 다시 빌드
10. 미세 팁
- Assertions 는 static 으로 선언해주면 (alt + enter) 다음에도 재사용이 가능하다.
'Java Spring > 스프링 핵심 원리 - 기본편' 카테고리의 다른 글
[Java Spring] 2-17. 관심사의 분리 (0) | 2023.02.28 |
---|---|
[Java Spring] 2-16. 새로운 할인 정책 적용과 문제점 (0) | 2023.02.28 |
[Java Spring] 2-14. 주문과 할인 도메인 실행과 테스트 (0) | 2023.02.27 |
[Java Spring] 2-13. 주문과 할인 도메인 개발 (0) | 2023.02.27 |
[Java Spring] 2-12. 주문과 할인 도메인 설계 (0) | 2023.02.27 |