본문 바로가기

SPRING/Spring

[스프링| 스프링 핵심 원리 | 기본편 | 스프링 핵심 원리 이해2 - 객체 지향 원리 적용]새로운 할인 정책 개발

 

https://agilemanifesto.org/iso/ko/manifesto.html

 

애자일 소프트웨어 개발 선언

애자일 소프트웨어 개발 선언 우리는 소프트웨어를 개발하고, 또 다른 사람의 개발을 도와주면서 소프트웨어 개발의 더 나은 방법들을 찾아가고 있다. 이 작업을 통해 우리는 다음을 가치 있게

agilemanifesto.org

// RateDiscountPolicy 클래스 선언
public class RateDiscountPolicy implements DiscountPolicy {

    // 할인율을 나타내는 변수 선언 및 초기화
    private int discountPercent = 10;

    // DiscountPolicy 인터페이스의 discount 메서드 구현
    @Override
    public int discount(Member member, int price) {
        // 만약 회원 등급이 VIP일 경우
        if(member.getGrade() == Grade.VIP) {
            // 할인된 가격을 계산하여 반환
            return price * discountPercent / 100;
        } else {
            // VIP가 아닌 경우 할인 없음을 반환
            return 0;
        }
    }
}
// RateDiscountPolicyTest 클래스 선언
class RateDiscountPolicyTest {

    // 테스트 대상인 RateDiscountPolicy 객체 생성
    RateDiscountPolicy discountPolicy = new RateDiscountPolicy();

    // VIP 회원에게 할인이 올바르게 적용되는지 테스트하는 메서드
    @Test
    @DisplayName("VIP는 10% 할인이 적용되어야 한다.")
    void vip_o(){
        //given
        // VIP 회원 객체 생성
        Member member = new Member(1L, "memberVIP", Grade.VIP);
        //when
        // 할인 계산
        int discount = discountPolicy.discount(member, 10000);
        //then
        // 할인이 올바르게 적용되었는지 검증
        assertThat(discount).isEqualTo(1000);
    }

    // VIP가 아닌 회원에게 할인이 적용되지 않는지 테스트하는 메서드
    @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);
    }
}