Java/[inflearn] 자바 기본

[김영한_자바기본][6. 접근 제어자] 배열 / 접근 제어자 함께 이해하기_문제풀이 쇼핑 카트(p.17)

줌인. 2024. 2. 6. 15:16
패키지가 서로 다르다면 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

 

728x90