🔥 Vamos/Java

1023 | 자바의 정석 예제 :: Vector 객체배열

unikue 2022. 10. 23. 21:30

Vector클래스 이지만 동적으로 크기가 관리되는 객체배열

 

물건을 구매할때 구매가격과 보너스 포인트를 적립하는 객체배열에서, 객체배열을 따로 생성하지 않고 Vector로 변경.

 

Product [ ]  item = new Product[10] 👉 Vector item = new Vector();

10개까지밖에 저장 못하지만 Vector은 내부적으로 Object타입의 배열을 가지고 있어서 배열의 크기를 알아서 관리 해준다.

따라서 저장할 인스턴스 개수에 신경쓰지 않아도 된다.

 

 

import java.util.Vector;

class Product3 {
	int price;			// 제품의 가격
	int bonusPoint;	// 제품구매 시 제공하는 보너스점수

	Product3(int price) {
		this.price = price;
		bonusPoint = (int)(price/10.0);
	}

	Product3() {
		price =0; bonusPoint =0;
	} // 기본 생성자
}

class Tv3 extends Product3 {
	Tv3() {  super(100);	 }

	public String toString() { return "Tv"; }
}

class Computer3 extends Product3 {
	Computer3() { super(200); }
	public String toString() { return "Computer"; }
}

class Audio3 extends Product3 {
	Audio3() { super(50); }
	public String toString() { return "Audio"; }
}

class Buyer3 {			  // 고객, 물건을 사는 사람
	int money = 1000;	  // 소유금액
	int bonusPoint = 0; // 보너스점수
	Vector item=new Vector(); // 구입한 제품을 저장하는데 사용될 Vector객체. 10개 넘으면 유동적으로 바뀌는 배열

	void buy(Product3 p) {
		if(money < p.price) {
			System.out.println("잔액이 부족하여 물건을 살 수 없습니다.");
			return;
		}

		money -= p.price;             // 가진 돈에서 구입한 제품의 가격을 뺀다.
		bonusPoint += p.bonusPoint;   // 제품의 보너스 점수를 추가한다.
		item.add(p);                // 구입한 제품을 Vector에 저장한다.
		System.out.println(p + "을/를 구입하셨습니다.");
	}
	
	void refund(Product3 p) {
		if(item.remove(p)) { // 제품을 Vector에서 제거
			money+=p.price;
			bonusPoint-=p.bonusPoint;
			System.out.println(p+"제품을 반품하셨습니다.");
		} else {
			System.out.println("구입하신 제품 중 해당제품이 없습니다.");
		}
	}
	
	void summary() {	              // 구매한 물품에 대한 정보를 요약해서 보여 준다.
		int sum = 0;                 // 구입한 물품의 가격합계
		String itemList ="";         // 구입한 물품목록

		if(item.isEmpty()) {	//	Vector가 없는지 확인
			System.out.println("구입하신 제품이 없습니다");
			return;
		}
		
		// 반복문을 이용해서 구입한 물품의 총 가격과 목록을 만든다.
		for(int i=0; i<item.size();i++) { // int.size() Vector에 저장된 객체의 개수 반환
			Product3 p=(Product3)item.get(i); // Vector의 i번째에 있는 객체를 가져온다
			// Object get(int index) 지정된 인덱스 위치의 객체 반환. 반환타입이 Object타입이므로 형변환 필요.
			sum+=p.price;
			itemList+=(i==0) ? "" + p: ", " + p;
		}
		System.out.println("구입하신 물품의 총금액은 " + sum + "만원입니다.");
		System.out.println("구입하신 제품은 " + itemList + "입니다.");
	}
}

class BookEx {
	public static void main(String args[]) {
		Buyer3 b = new Buyer3();
		Tv3 tv3 = new Tv3();
		Computer3 com3=new Computer3();
		Audio3 au3= new Audio3();
		
		b.buy(tv3);
		b.buy(com3);
		b.buy(au3);
		b.summary();
		System.out.println();
		b.refund(com3);
		b.summary();	
	}
}