☕ 자바 JAVA/☕ 클래스와 함수 Class & Method

[JAVA]다형성의 장점2:여러 종류의 객체를 배열로 다루기

뉴이 NUEY 2024. 4. 8. 04:46
반응형

 

조상type의 배열에 자손들의 객체를 담을 수 있다

 

Product2를 상속받는 class들이 있을 때
이렇게 하나씩 할 수도 있지만
조상 class타입의 배열로 만들어 저장하는 게 효율적이다.

 


 

public class ManyKindOfObjectArray {
    public static void main(String[] args) {
        Buyer2 b = new Buyer2();

        b.buy(new Tv2());
        b.buy(new Computer2());
        b.buy(new Audio2());
        b.summary();

        System.out.println("현재 남은 돈은 " + b.money + "만원입니다.");
        System.out.println("현재 보너스점수는 " + b.point + "점입니다.");
    }
}

class Product2 {
    int price;
    int point;

    Product2(int price) {
        this.price = price;
        this.point = (int) (price / 10.0); // 제품가격의 10%가 bonusPoint
    }
}
class Tv2 extends Product2 {
    Tv2() {
        super(200);
    }
    public String toString(){return "Tv";}
}
class Computer2 extends Product2 {
    Computer2(){
        super(300);
    }
    public String toString() {return "Computer";}
}
class Audio2 extends Product2 {
    Audio2() {
        super(100);
    }
    public String toString(){return "Audio";}
}
class Buyer2 {
    int money = 1000;
    int point = 0;
    
    Product2[] cart = new Product2[10]; // 구입한 물건을 담을 배열

    int i = 0;
    
    // 구매한 물품을 계산한다
    void buy(Product2 p) {
        if (money < p.price) {
            System.out.println("잔액부족");
            return;
        }

        money -= p.price;
        point += p.point;
        cart[i++] = p;
        System.out.println(p + "을/를 구입하셨습니다.");
    }

    // 구매한 물품에 대한 정보를 요약한다
    void summary() {
        int sum = 0;
        String itemList = "";

        for (int i = 0; i < cart.length; i++) {
            if(cart[i] == null) break;
            sum += cart[i].price;
            itemList += cart[i] + ", ";
        }
        System.out.println("구입하신 물품의 총금액은 " + sum + "만원입니다.");
        System.out.println("구입하신 제품은 " + itemList + "입니다.");
    }
}

이전 게시글에서 이번 강의내용이 추가된 코드

 

코드가 너무 이쁘고 멋지다.
memory가 쌓이는 걸 보지만 말고 그리면서 하라고 하셔서 찔리고
이 명강의가 당시에 조회수가 없었다니 충격적이었다.

 

반응형