본문
배열 vs Vector
프로그래밍/Java 2016. 1. 12. 21:35
반응형
물건을 구입, 환불, 총액 계산을 하는 예제이다.
만일 이 예제의 Product를 배열로 했다면, 배열은 고정크기이므로 사용자(Buyer)가 구매할 수 있는 상품이 제한될 것이다.
그렇다고 해서 배열의 크기를 무조건 크게 설장할 수 만도 없는 일이다.
이런 경우, Vector클래스를 사용하면 된다. Vector클래스는 내부적으로 Object타입의 동적으로 크기가 관리되는 객체배열이기 때문이다.
그리고 배열의 크기를 알아서 관리해주기 때문에 저장할 인스턴스의 개수에 신경쓰지 않아도 된다.
Source01) VectorEx.java
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 | import java.util.Vector; public class VectorEx { public static void main(String[] args) { Buyer buyer = new Buyer(); Tv tv = new Tv(); Computer computer = new Computer(); Audio audio = new Audio(); buyer.buy(tv); buyer.buy(computer); buyer.buy(audio); buyer.summary(); System.out.println(); buyer.refund(computer); buyer.summary(); } } class Product { final static int BONUS_POINT = 10; int price; // 제품의 가격 int bonusPoint; // 제품구매 시 제공하는 보너스의 점수 Product(int price) { this.price = price; bonusPoint = (int) (price / BONUS_POINT); } Product() { price = 0; bonusPoint = 0; } } class Tv extends Product { Tv() { super(100); // 조상클래스의 생성자 Product(int price)를 호출한다. // 즉 Tv의 가격을 100으로 지정 } public String toString() { return "Tv"; } } class Computer extends Product { public Computer() { super(200); // Computer의 가격을 200으로 지정 } public String toString() { return "Computer"; } } class Audio extends Product { public Audio() { super(50); // Audio의 가격을 50으로 지정 } public String toString() { return "Audio"; } } // 고객, 물건을 사는 사람 class Buyer { int money = 1000; // 소유금액 int bonusPoint = 0; // 보너스점수 /* * 구입한 제품을 저장하기 위한 배열 배열로 크기를 지정하면 11개 이상의 제품을 구입할 수 없다. * 그렇다고 배열의 크기를 무조건 크게 설정할 수만도 없는 일이다. 따라서 동적배열인 Vector클래스를 사용한다. */ // Product[] item = new Product[10]; // 구입한 제품을 저장하는데 사용될 Vector객체 Vector item = new Vector(); void buy(Product product) { if (money < product.price) { System.out.println("잔액이 부족하여 물건을 살 수 없습니다."); return; // 프로그램 종료 } // 가진 돈에서 구입한 제품의 가격을 뺀다. money -= product.price; // 제품의 보너스 점수를 추가한다. bonusPoint += product.bonusPoint; // 구입한 제품을 Vector에 저장한다. item.add(product); System.out.println(product + "을/를 구입하셨습니다."); } // 구입한 제품을 환불한다. void refund(Product product) { // 구입한 제품을 환불한다. if (item.remove(product)) { money += product.price; bonusPoint -= product.bonusPoint; System.out.println(product + "을/를 반품하셨습니다."); } else { // 제거에 실패한 경우 System.out.println("구입하신 제품 중 해당 제품이 없습니다."); } } // 구매한 물품에 대한 정보를 요약해서 보여준다. void summary() { int sum = 0; // 구매 총액 String itemList = ""; // Vector가 비어있는지 확인한다. if (item.isEmpty()) { System.out.println("구입하신 제품이 없습니다."); return; // 프로그램 종료 } // 반복문을 이용해서 구입한 물품의 총 가격과 목록을 만든다. for (int i = 0; i < item.size(); i++) { Product product = (Product) item.get(i); Product bonusPoint = new Product(); sum += product.price; itemList += (i == 0) ? "" + product : ", " + product; } System.out.println("구입하신 물품의 총금액은 " + sum + "만원이며, 누적 포인트는 " + bonusPoint + "점 입니다."); System.out.println("구입하신 제품은 " + itemList + " 입니다."); } } | cs |
Result)
1 2 3 4 5 6 7 8 9 | Tv을/를 구입하셨습니다. Computer을/를 구입하셨습니다. Audio을/를 구입하셨습니다. 구입하신 물품의 총금액은 350만원이며, 누적 포인트는 35점 입니다. 구입하신 제품은 Tv, Computer, Audio 입니다. Computer을/를 반품하셨습니다. 구입하신 물품의 총금액은 150만원이며, 누적 포인트는 15점 입니다. 구입하신 제품은 Tv, Audio 입니다. | cs |
- 참고 : JAVA의정석(남궁성 저)
반응형
댓글