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; // Product배열에 사용될 카운터
void buy(Product p) {
if(money < p.price) {
System.out.println("잔액이 부족하여 물건을 살수 없습니다.");
return;
}
money -= p.price; // 가진 돈에서 구입한 제품의 가격을 뺀다.
bonusPoint += p.bonusPoint; // 제품의 보너스 점수를 추가한다.
item[i++] = p; // 제품을 Product[] item에 저장한다.
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 + "입니다.");
}
}
class PolyArgumentTest2 {
public static void main(String args[]) {
Buyer b = new Buyer();
b.buy(new Tv());
b.buy(new Computer());
b.buy(new Audio());
b.summary();
}
}
위 예제에서 product 배열로 구입한 물품을 저장할 수 있도록 했으나 Product[] item = new Product[10]; 에서 알 수 있듯이 배열의 크기를10으로 했기 때문에 11개 이상의 물품을 구입할 수가 없다.
이런 상황을 위해서 배열의 크기를 무작정 100, 1000, 10000... 이렇게 크게 설정할 수만도 없는 일이다. 생성된 배열을 사용하지 않게 된다면 데이터 낭비가 되기 때문이다.
이럴 때에는 배열의 크기를 무작정 크게 하는 것이 아닌 Vector클래스를 사용하면 된다.
public class Vector extends AbstractList
implements List, Cloneable, java.io.Serializable{
protected Object elementData[];
...
}
Vector클래스는 이름 때문에 클래스의 기능을 오해할 수 있는데, 단지 동적으로 크기가 관리되는 객체배열일 뿐이다.
메소드 / 생성자 | 설명 |
Vaector() | 10개의 객체를 저장할 수 있는 Vector인스턴스를 생성한다. 10개 이상의 인스턴스가 저장되면, 자동적으로 크기가 증가된다. |
boolean add(Object o) | Vector에 객체를 추가한다. 추가에 성공하면 true, 실패하면 false를 반환한다. |
boolean remove(Object o) | Vector에 저장된 객체를 제거한다. 제거에 성공하면 true, 실패하면 false를 반환한다. |
boolena isEmpty() | Vector가 비어있는지 검사한다. 비어 있으면 true, 비어있지 않으면 false를 반환한다. |
Objext get(int idx) | 지정된 위치 idx의 객체를 반환한다. 반환타입이 Object타입이므로 적절한 타입으로의 형변환이 필요하다. |
int size() | Vector에 저장된 객체의 개수를 반환한다. |
import java.util.*;
class Product {
int price;
int bonusPoint;
Product(int price) {
this.price = price;
bonusPoint =(int)(price/10.0);
}
Product() {
price = 0;
bonusPoint = 0;
}
}
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; // 보너스점수
//Vector<Product> item = new Vector<Product>(); // 구입한 제품을 저장하는데 사용될 Vector객체
Vector item = new Vector();
void buy(Product p)
{
if(money < p.price)
{
System.out.println("잔액이 부족하여 물건을 살수 없습니다.");
return;
}
money -= p.price;
bonusPoint += p.bonusPoint;
item.add(p);
System.out.println(p + "을/를 구입하셨습니다.");
}
void refund(Product p)
{
if(item.remove(p))
{
money += p.price;
bonusPoint -= p.bonusPoint;
System.out.println(p + "을/를 반품하셨습니다.");
}
else
{
System.out.println("구입하신 제품 중 해당 제품이 없습니다.");
}
}
void summary() {
int sum = 0;
String itemList ="";
if(item.isEmpty()) {
System.out.println("구입하신 제품이 없습니다.");
return;
}
for(int i=0; i<item.size();i++) {
Product p = (Product)item.get(i);
sum += p.price;
itemList += (i==0) ? "" + p : ", " + p;
}
System.out.println("구입하신 물품의 총금액은 " + sum + "만원입니다.");
System.out.println("구입하신 제품은 " + itemList + "입니다.");
}
}
class PolyArgumentTest3 {
public static void main(String args[]) {
Buyer b = new Buyer();
Tv tv = new Tv();
Computer com = new Computer();
Audio audio = new Audio();
b.buy(tv);
b.buy(com);
b.buy(audio);
b.summary();
System.out.println();
b.refund(com);
b.summary();
}
}
'Java > Day24' 카테고리의 다른 글
[Java] 이클립스 단축키 모음 (0) | 2021.12.05 |
---|---|
[Java] default 메소드 & static 메소드 (0) | 2021.12.05 |
[Java] import문 & static import문 (0) | 2021.12.05 |
[Java] 예외처리 연습문제 (0) | 2021.12.05 |