Java Collection - 리스트로 문제 풀이 - 쇼핑카트

메인에서 사용되도록 Item 클래스를 활용하고 ShoppingCart 클래스에 리스트를 추가해 리팩토링하기

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 getName() {
        return name;
    }

    public int getTotalPrice() {
        return price * quantity;
    }
}

Main.class

public class Main {
    public static void main(String[] args) {
        ShoppingCart cart = new ShoppingCart();

        Item cart1 = new Item("김치", 20000, 1);
        Item cart2 = new Item("쌀", 30000,2);

        cart.add(cart1);
        cart.add(cart2);

        cart.displayItems();
    }
}

실행 결과

장바구니 목록
상품명: 김치, 총 가격: 20000
상품명: 쌀, 총 가격: 60000
전체 가격:80000

풀이 - ShoppingCart

public class ShoppingCart {

    private List<Item> items = new ArrayList<>();

    public void add(Item item) {
        items.add(item);
    }

    public void displayItems() {
        System.out.println("장바구니 상품 출력");
        for (Item item : items) {
            System.out.println("상품명: " + item.getName() + ", 총 가격: " + item.getTotalPrice());
        }

        int totalPrice = 0;
        for (Item item : items) {
            totalPrice += item.getTotalPrice();
        }
        System.out.print("전체 가격: " + totalPrice);
    }
}

List 장점

ArrayList 보다 List 자료구조를 사용하는 것이 좋은 점을 찾을 수 있다.

  • 자료 구조의 크기를 동적으로 증가. 배열처럼 입력 가능한 크기를 미리 계산하지 않아도됨.
  • 변수 count 사용으로 배열의 데이터 몇 개인지 추가로 작성되는 이 변수 제거함. 데이터 몇 개인지 가져오려면 size() 메소드를 사용해 크기를 제공

배열로 사용한 ShoppingCart

import java.util.ArrayList;
import java.util.List;

public class ShoppingCart {

    private List<Item> items = new Item[10];
    private int count;

    public void add(Item item) {
        if (count >= items.length) {
            System.out.println("바구니가 가득합니다.");
        }

        items[count] = item;
        count;
    }

    public void displayItems() {
        System.out.println("장바구니 상품 출력");
        for (int i = 0; i < count; i++) {
            Item item = items[i];
            System.out.println("상품명: " + item.getName() + ", 총 가격: " + item.getTotalPrice());
        }

        int totalPrice = 0;
        for (Item item : items) {
            totalPrice += item.getTotalPrice();
        }
        System.out.print("전체 가격: " + totalPrice);
    }
}