본문 바로가기
개발공부/Java

[Java] 17. 다형성(polymorphism) 예제

by sangyeon 2022. 1. 26.
728x90

다형성을 활용한 멤버십 프로그램 확장

  • 일반 고객과 VIP 고객 중간 멤버십 만들기

고객이 늘어 일반 고객보다는 많이 구매하고 VIP고객 보다는 적게 구매하는 고객에게도 혜택을 주기로 한다..
GOLD 고객 등급을 만들고 혜택은 다음과 같다.

  1. 제품을 살 때는 10프로를 할인해준다.
  2. 보너스 포인트는 2%를 적립해준다.

 

- GoldCustomer.java

package ch06;

public class GoldCustomer extends Customer {

    double salesRatio;

    public GoldCustomer(int customerID, String customerName) {
        super(customerID, customerName);

        customerGrade = "Gold";
        bonusRatio = 0.02;
        salesRatio = 0.1;
    }

    public int calcPrice(int price) {
        bonusPoint += price * bonusRatio;
        return price - (int)(price * salesRatio);
    }
}

 

 

 

- CustomerTest.java

package ch06;

import java.util.ArrayList;

public class CustomerTest {

    public static void main(String[] args) {

        ArrayList<Customer> customerList = new ArrayList<>();

        /*
         * 일반  고객 2명, Gold 고객 2명, VIP  고객 1명 
         * 서로 다른 하위 클래스가 있지만 하나의 상위 클래스(Customer)로 핸들링 한다.
         */

        Customer c1 = new Customer(10010, "Son");
        Customer c2 = new Customer(10020, "Kane");
        Customer c3 = new GoldCustomer(10030, "Moura");
        Customer c4 = new GoldCustomer(10040, "Skipp");
        Customer c5 = new VIPCustomer(10050, "Dier");

        customerList.add(c1);
        customerList.add(c2);
        customerList.add(c3);
        customerList.add(c4);
        customerList.add(c5);

        /*
        for(Customer customer : customerList) {
            System.out.println(customer.showCustomerInfo());
        }
        */

        int price = 10000;

        for(Customer customer : customerList) {
            int cost = customer.calcPrice(price);
            System.out.println(customer.getCustomerName() + "님이 " + cost + "원 지불하셨습니다.");
            System.out.println(customer.getCustomerGrade() + "등급의 " + customer.getCustomerName() + "님의 현재 보너스 포인트는 " + customer.bonusPoint + " 입니다.");
            System.out.println();
        }
    }
}

 

출력 결과

Son님이 10000원 지불하셨습니다.
SILVER등급의 Son님의 현재 보너스 포인트는 100 입니다.

Kane님이 10000원 지불하셨습니다.
SILVER등급의 Kane님의 현재 보너스 포인트는 100 입니다.

Moura님이 9000원 지불하셨습니다.
Gold등급의 Moura님의 현재 보너스 포인트는 200 입니다.

Skipp님이 9000원 지불하셨습니다.
Gold등급의 Skipp님의 현재 보너스 포인트는 200 입니다.

Dier님이 9000원 지불하셨습니다.
VIP등급의 Dier님의 현재 보너스 포인트는 500 입니다.

 

 

 

* 테스트 소스 파일 첨부

poly-examples.zip
0.00MB

728x90