🔥 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();
}
}