주문과 할인 도메인 개발

학습 페이지

할인 정책 서비스을 만들어보자.

우선 할인 정책 서비스에 대한 인터페이스를 하나 만들어준다.

package hello.core.Discount;

import hello.core.member.Member;

public interface DiscountPolicy {
    /*
     *
     *
     * @return 할인 대상 금액
     * */
    int discount(Member member, int price);
}

이제 구현체를 만들어주자.

package hello.core.Discount;

import hello.core.member.Grade;
import hello.core.member.Member;

public class FixDiscountPolicy implements DiscountPolicy{

    private int discountFixAmount = 1000; //1000원 고정 할인
    @Override
    public int discount(Member member, int price) {
        if(member.getGrade() == Grade.VIP) { //member가 VIP일때만 할인
            return discountFixAmount;
        }
        else {
            return 0;
        }
    }
}

주문서 모델을 만들어주자. 이 모델은 클라이언트부터 시작해서 주문서비스, 할인정책 서비스 두루두루 쓰일 것이다.

package hello.core.order;

public class Order {

    private Long memberId; //회원 ID
    private String itemName; //상품 이름
    private int itemPrice; //할인 전의 가격
    private int discountPrice; //할인 가격적용된 후의 가격

    public Order(Long memberId, String itemName, int itemPrice, int discountPrice) {
        this.memberId = memberId;
        this.itemName = itemName;
        this.itemPrice = itemPrice;
        this.discountPrice = discountPrice;
    }

    public Long getMemberId() {
        return memberId;
    }

    public void setMemberId(Long memberId) {
        this.memberId = memberId;
    }

    public String getItemName() {
        return itemName;
    }

    public void setItemName(String itemName) {
        this.itemName = itemName;
    }

    public int getItemPrice() {
        return itemPrice;
    }

    public void setItemPrice(int itemPrice) {
        this.itemPrice = itemPrice;
    }

    public int getDiscountPrice() {
        return discountPrice;
    }

    public void setDiscountPrice(int discountPrice) {
        this.discountPrice = discountPrice;
    }
}

이 안에 할인 정책과 관련된 계산 로직을 하나 넣어줄 것이다.

    public int calculatePrice() {
        return itemPrice - discountPrice;
    }

바로 이 녀석임…

여기에 결과보기 쉽게 toString까지 오버라이딩 해주자.

package hello.core.order;

public class Order {

    private Long memberId; //회원 ID
    private String itemName; //상품 이름
    private int itemPrice; //할인 전의 가격
    private int discountPrice; //할인 가격적용된 후의 가격

    public Order(Long memberId, String itemName, int itemPrice, int discountPrice) {
        this.memberId = memberId;
        this.itemName = itemName;
        this.itemPrice = itemPrice;
        this.discountPrice = discountPrice;
    }

    public int calculatePrice() {
        return itemPrice - discountPrice;
    }

    public Long getMemberId() {
        return memberId;
    }

    public void setMemberId(Long memberId) {
        this.memberId = memberId;
    }

    public String getItemName() {
        return itemName;
    }

    public void setItemName(String itemName) {
        this.itemName = itemName;
    }

    public int getItemPrice() {
        return itemPrice;
    }

    public void setItemPrice(int itemPrice) {
        this.itemPrice = itemPrice;
    }

    public int getDiscountPrice() {
        return discountPrice;
    }

    public void setDiscountPrice(int discountPrice) {
        this.discountPrice = discountPrice;
    }

    @Override
    public String toString() { //toString 오버라이
        return "Order{" +
                "memberId=" + memberId +
                ", itemName='" + itemName + '\\'' +
                ", itemPrice=" + itemPrice +
                ", discountPrice=" + discountPrice +
                '}';
    }
}

그 다음으로 주문 서비스를 만들어주자. 인터페이스부터 만든다.