1. 새로운 할인 정책 확장
- 악덕 기획자
서비스 오픈 직전에 할인 정책을 지금처럼 고정 금액 할인이 아니라 좀 더 합리적인 주문 금액당 할인하는 정률% 할인으로 변경하고 싶어요.
예를 들어서 기존 정책은 VIP가 10000원을 주문하든 20000원을 주문하든 항상 1000원을 할인했는데, 이번에 새로 나온 정책은 10%로 지정해두면 고객이 10000원 주문시 1000원을 할인해주고, 20000원 주문시에 2000원을 할인해주는 거에요!
- 순진 개발자
제가 처음부터 고정 금액 할인은 아니라고 했잖아요.
- 악덕 기획자
애자일 소프트웨어 개발 선언 몰라요? "계획을 따르기보다 변화에 대응하기를"
- 순진 개발자
... (하지만 난 유연한 설계가 가능하도록 객체지향 설계 원칙을 준수했지 후후)
애자일 소프트웨어 개발 선언 : https://agilemanifesto.org/iso/ko/manifesto.html
애자일 소프트웨어 개발 선언
애자일 소프트웨어 개발 선언 우리는 소프트웨어를 개발하고, 또 다른 사람의 개발을 도와주면서 소프트웨어 개발의 더 나은 방법들을 찾아가고 있다. 이 작업을 통해 우리는 다음을 가치 있게
agilemanifesto.org
순진 개발자가 정말 객체지향 설계 원칙을 잘 준수 했는지 확인한다.
이번에는 주문한 금액의 %로 할인해주는 새로운 정률 할인 정책을 추가한다.
2. RateDiscountPolicy 추가

1) RateDiscountPolicy 코드 추가
- src/main/java/hello/core/discount/RateDiscountPolicy.java
package hello.core.discount;
import hello.core.member.Grade;
import hello.core.member.Member;
public class RateDiscountPolicy implements DiscountPolicy {
private int discountPercent = 10; // 10% 할인
@Override
public int discount(Member member, int price) {
if (member.getGrade() == Grade.VIP) {
return price * discountPercent / 100;
} else {
return 0;
}
}
}
2) 테스트 작성
인텔리제이 테스트 코드 생성 : Ctrl + Shift + T > 테스트 생성
- 라이브러리 테스트 : JUnit5
- 클래스 이름 : RateDiscountPolicyTest
- 대상 패키지 : hello.core.discount
- src/test/java/hello/core/discount/RateDiscountPolicyTest.java
package hello.core.discount;
import hello.core.member.Grade;
import hello.core.member.Member;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.*;
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
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
assertThat(discount).isEqualTo(0);
}
}
@DisplayName("테스트 내용") : 테스트 실행시, 테스트 케이스와 같은 이름을 적을 수 있다. (JUnit5부터 적용)
할인정책을 추가하고 테스트 완료
참고링크 : https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8?cid=325969
스프링 핵심 원리 - 기본편| 김영한 - 인프런 강의
현재 평점 5.0점 수강생 49,504명인 강의를 만나보세요. 스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다. 스프링 기본 기능, 스프
www.inflearn.com
'강의 실습 > 스프링 핵심 원리 - 기본편' 카테고리의 다른 글
| 관심사의 분리 (0) | 2026.04.02 |
|---|---|
| 새로운 할인 정책 적용과 문제점 (0) | 2026.04.01 |
| 주문과 할인 도메인 실행과 테스트 (0) | 2026.03.30 |
| 주문과 할인 도메인 개발 (0) | 2026.03.30 |
| 주문과 할인 도메인 설계 (0) | 2026.03.29 |
댓글