java 접근 제어자를 활용하면서 간단한 예제를 풀며 에러가 생겨 해결하던 중 다시 같은 실수를 반복하지 않기 위해 이번 블로그를 포스팅하게 되었다.
[ShoppingCartMain]
package access.ex;
public class ShoppingCartMain {
public static void main(String[] args) {
ShoppingCart cart = new ShoppingCart();
Item item1 = new Item("마늘", 2000, 2);
Item item2 = new Item("상추", 3000, 4);
cart.addItem(item1);
cart.addItem(item2);
cart.displayItems();
cart.showTotal();
}
}
[ShoppingCart]
package access.ex;
public class ShoppingCart {
private Item[] items = new Item[10];
private int itemCount = 0;
public void addItem(Item item){
if (itemCount == 10) {
System.out.println("장바구니가 가득 찼습니다.");
return;
}
items[itemCount] = item;
itemCount++;
}
public void displayItems(){
System.out.println("장바구니 상품 출력");
for (int i = 0; i < itemCount; i++) {
items[i].showItem();
}
public void showTotal(){
int total = 0 ;
for (int i = 0; i < itemCount; i++) {
total = items[i].sum();
}
System.out.println("총 금액 : "+ total);
}
}
[Items]
package access.ex;
public class Item {
private String name;
private int price;
private int quantity;
public Item(String name, int price, int quantity) {
this.name = name;
this.price = price;
this.quantity = quantity;
}
public void showItem(){
System.out.println("상품명: " + name + ", 합계: " + (price*quantity));
}
public int sum(){
return quantity * price;
}
}
문제는 ShoppingCart 내의 displayItems() 와 showItem()에서 발생했다.
이전 코드로
for (Item item : items) {
item.showItem();
}
를 사용했는데 이렇게 될 경우 items[10] 중 item이 생성되지 않은 인덱스까지 모두 계산되기 때문에 null이 발생한 것이었다.
위의 문제는 itemCount를 사용해서 해결 할 수 있었다...