티스토리 뷰

여러 타입의 객체를 배열로 다루기

  • 예시

    package com.Hazel;
    
    public class Main {
    
        public static void main(String[] args) {
            Buyer b = new Buyer();
    
            b.buy(new TV());
            b.buy(new Computer());
            b.buy(new Audio());
            b.summary();
        }
    }
    
    class Product {
        int price;
        int bonuspoint;
    
        Product(int price) {
            this.price = price;
            bonuspoint = (int)(price / 10.0);
        }
    
        Product() {}
    }
    
    class TV extends Product {
        TV() { super(100); }
    
        public String toString() { return "TV"; }
    }
    
    class Computer extends Product {
        Computer() { super(200); }
    
        public String toString() { return "Computer"; }
    }
    
    class Audio extends Product {
        Audio() { super(50); }
    
        public String toString() { return "Audio"; }
    }
    
    class Buyer {
        int money = 1000;
        int bonuspoint = 0;
    
        Product[] item = new Product[10];
        int i = 0;
    
        void buy(Product p) {
            if(money < p.price) {
                System.out.println("잔액이 부족하여 물건을 살 수 없습니다.");
                return;
            } else {
                money -= p.price;
                bonuspoint += p.bonuspoint;
                item[i++] = p; // ++ 연산자가 뒤에 있어서 저장하고 +1
                System.out.println(p + "을 구매하셨습니다.");
            }
        }
    
        void summary() {
            int sum = 0;
            String itemList = "";
    
            for(int i = 0; i < item.length ; i++) {
                if(item[i] == null) { break; }
                sum += item[i].price;
                itemList += item[i] + ", ";
            }
            System.out.println("구입하신 물품의 총금액은 " + sum + "입니다.");
            System.out.println("구입하는 제품은 " + itemList + "입니다.");
        }
    }
    

    여기서 중요한 부분은 item[i++] = p;이다. 매개변수로 전달된 인스턴스를 item 배열에 저장하는데, ++연산자가 i뒤에 오기 때문에 배열에 먼저 저장을 하고 i는 증가된다. 그래서 0번째 인덱스부터 인스턴스를 저장할 수 있다.

    그리고 또, p자체를 System.out.println 으로 출력하는 것이 특이하다. p.toString() 으로 접근해야 원하는 문자열이 출력될 것이라고 생각했다. 검색해보니 toString()은 자바에서 특별 취급하는 메소드이며, toString()을 메소드를 사용하면 그 클래스의 인스턴스 자체를 출력해도 toString() 메소드의 문자열을 반환하도록 약속되어 있다고 한다. 즉, p.toString()p 출력 결과가 같다고 한다.

'Java' 카테고리의 다른 글

컬렉션 프레임워크, ArrayList, LinkedList  (0) 2019.05.13
인터페이스(Interface)  (0) 2019.05.12
Instanceof, 참조변수와 인스턴스의 연결  (0) 2019.05.12
다형성  (0) 2019.05.12
제어자  (0) 2019.05.09
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함