[김영한_자바기본][6. 접근 제어자] 배열 / 접근 제어자 함께 이해하기_문제풀이 쇼핑 카트(p.17)
패키지가 서로 다르다면 import를 선언하는 것이 중요하며,
main 메서드가 없는 경우 매개변수로 대체하여 진행할 수 있다.
끝으로 return은 메서드 (전체) 실행 중간에서 빠져나가는 역할을 하고,
break는 주로 반복문에서 사용되며, 반복을 중단하고 루프를 빠져나간다.
배열의 모든 요소를 점검해야할 때 break를 통해 빠져나가는 것은 추천하지 않는다.
*문제풀이_쇼핑 카트
[p.17 / 실행 요청 결과]
장바구니 상품 출력 상품명 : 마늘, 합계 : 4000 상품명 : 상추, 합계 : 12000 전체 가격 합 : 16000 |
[p.17 / shoppingcart main class]
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();
}
[p.18 / Item class]
public class Item {
private String name;
private int price;
private int quantity;
//TODO 나머지 코드를 완성해라
}
[p.18 / ShoppingCart class]
public class ShoppingCart {
private Item[] items = new Item[10];
private int itemCount;
//TODO 나머지 코드를 완성해라
}
↓ 코드 풀이 및 작성 ↓
[p.17 / shoppingcart main class]
public static void main(String[] args) {
ShoppingCart cart = new ShoppingCart();
Item item1 = new Item("마늘",2000,2); //item1에 참조값
Item item2 = new Item("상추",3000,4); //item 변수 담기
cart.addItem(item1); //item 위치 받아 additem에 전달
cart.addItem(item2);
cart.displayItems();
}
- 쇼핑 카트에 아이템을 추가하고, 추가된 아이템들을 출력하는 기능을 수행한다.
[p.18 / Item class]
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 String itemName() {
return name; //ShoppingCart내에서 사용할 것이기 때문에 판단후 반환
}
public int itemPrice() {
return price * quantity;
}
- 생성자를 통해 변수들을 초기화한다.
- `itemName` 및 `itemPrice` 메서드를 제공하여 아이템의 이름과 총 가격에 언제든지 접근할 수 있다.
[p.18 / ShoppingCart class]
public class ShoppingCart {
private Item[] items = new Item[10]; //배열도 내부에서 관리 -> private
private int itemCount;
//배열에 데이터 입력
public void addItem(Item item) { //item1 참조값 -> 배열에 담으면 됨
if(itemCount >= items.length) {//조건 검증이기 때문에 +1 더 큰 값 생각하기
System.out.println("장바구니가 가득 찼습니다.");
return; //빠져나오는 것 (break는 실행 후 빠져남, return은 그냥)
}
items[itemCount] = item; //item1 참조값 -> 배열에 담으면 됨
itemCount++;
}
//배열 데이터 출력
public void displayItems() {
System.out.println("장바구니 상품 출력");
for (int i = 0 ; i < itemCount ; i++) { //iter안쓰는 이유 : 루프 다 안돔
Item item = items[i]; //어떤 것을 출력할 것인지 지정*
//Item변수에 참조값을 넣음 -> next step: 참조값 "."로 출력
System.out.println("상품명 : " + item.itemName() + ", 합계 ; " + item.itemPrice());
}
System.out.println("전체 가격 합 : " + totalAmount());
}
private int totalAmount() {
int sum = 0;
for (int i = 0 ; i < itemCount ; i++) { //iter안쓰는 이유 : 루프 다 안돔
Item item = items[i];
sum += item.itemPrice();
}
return sum;
}
>> 세부 설명 displayItems() 일부분 발췌
for (int i = 0 ; i < itemCount ; i++) {
Item item = items[i];
}
- 해당 부분은 배열 `items`에 저장된 아이템 객체 중에서 인덱스 `i`에 해당하는 아이템을 가져와서
`item` 변수에 할당하는 부분이다.
- `item` 변수는 이후에 아이템의 이름 및 합계 가격을 출력에 효율적으로 사용되기 위해 선언되었다.
객체 지향 프로그래밍의 개념을 활용하여 캡슐화와 배열을 활용하여 데이터를 관리하고 조작한다.
*배열을 이해하는 것이 중요하다.
**Tip**
- 특정 클래스를 import하지 않고 사용하려면, 그 클래스가 작성한 클래스와 동일한 패키지에 있어야 한다.
만약 서로 다른 패키지에 있다면 `import` 문을 사용하여 패키지를 명시해야 한다.
- main 메서드가 없는 경우도 다른 클래스에서 해당 클래스를 사용하기 위해 import 문을 작성하지 않을 수 있다.
이유는 메서드의 매개변수로 해당 클래스의 인스턴스를 전달하면, 전달된 객체의 메서드를 호출할 수 있기 때문이다.
▶ 기본형과 참조형의 배열 문제 이해
https://zoooom-in.tistory.com/54
[김영한_자바기본][2.기본형과 참조형] (보충*) 상품 주문 시스템 개발_문제 풀이 해석 (p.30-34)
중간 변수 없이 참조값 자체를 배열로 전달할 수 있으며, 배열을 매개변수로 받으면 배열 내 요소를 반복 출력할 수 있다. 또한 입력받은 값은 배열에 담기위한 작업을 수행하고, 기존 코드를 기
zoooom-in.tistory.com