[JAVA] 키오스크(4) - 장바구니 만들기

림민지·2025년 3월 12일

Today I Learn

목록 보기
23/62

이제 메뉴를 선택하는 것만이 아니라 장바구니에 담고, 정말 주문할 것인지도 물어보자

[ 구현할 것 ]
1. 장바구니
2. 총액 계산하기
3. 클래스 정리


1️⃣ 장바구니(OrderList) 클래스 만들기

장바구니 클래스를 분리해서 만들자
private로 리스트를 관리하고 getter, setter를 활용해서 장바구니에 메뉴를 추가하고 꺼내서 보여줘보자

1. orderList 리스트 만들기

  • 외부에서 무분별한 접근을 막기 위해 privateorderLsit를 만들었다
  • 총액 계산을 위해서 totalPrice도 정의
private final List<MenuItemCh1> orderList = new ArrayList<>(); //장바구니 리스트
private double totalPrice = 0; //총액 변수
  • 메뉴 이름, 가격, 설명을 인자로 받아서 orderList에 add
  • 받은 가격을 totalPrice에 더하기
//선택한 메뉴 담기 + 가격 더하기
public void AddOrderList(String name, double price, String description){
	orderList.add(new MenuItemCh1(name, price, description));
    totalPrice += price;
    }

2. getter 메서드 만들기

private로 **orderLsit**와 totalPrice`를 정의했었다.
때문에 다른 클래스에서 저 요소를 사용하려면 getter메서드를 만들어주어야한다.

(1) 리스트에 담긴 목록 반환하기 getOrderList()

orderList 내부 전체를 반환하는 getter를 먼저 만들어주자

public List<MenuItemCh1> getOrderList(){
	return orderList;
    }

(2) 총 금액 반환하기 getTotalPrice

총 금액을 반환해주는 getter를 만들자

public double getTotalPrice(){
	return totalPrice;
    }

(3) 리스트 목록을 출력하는 printOrderList()

원래 Kiosk 클래스 내부에서 출력문을 만들어도 되지만,
이미 키오스크 클래스가 너무 복잡해서 따로 만들어주기로

2️⃣ Kiosk 클래스에 적용

1. 장바구니 기능 추가

만들어준 장바구니 OrderList를 Kiosk클래스에 불러오자

public class KioskCh1 {
    Scanner scanner = new Scanner(System.in);
    MenuCh1 menu = new MenuCh1();
    List<String> category = new ArrayList<>(menu.getMenuCategory().keySet());
    OrderList orderList = new OrderList(); //추가된 부분

만약 장바구니에 목록이 있다면 주문한 리스트를 보여주어야하므로
!orderList.getOrderList().isEmpty() isEmpty()를 사용하자.

if (!orderList.getOrderList().isEmpty()) {
	System.out.println("[ Order Menu ]");
    System.out.println("4. Orders       | 장바구니를 확인 후 주문합니다.\n"
                    + "5. Cancel       | 진행중인 주문을 취소합니다.");}

2. 주문 확인하기

위에서 4번을 선택했다면 지금까지의 주문내역을 확인시켜주고 정말 주문할건지 물어봐야한다.

//주문 출력
orderList.printOrderList();
System.out.println("\n" +"[ Total ] \n" + "W " + orderList.getTotalPrice());

System.out.println("1. 주문      2. 메뉴판");
int lastSelect = scanner.nextInt();

1번을 선택한다면 최종금액을 보여주고, 아니면 다시 처음으로 되돌아가자

if (lastSelect == 1){
	System.out.println("주문이 완료되었습니다. 금액은 W "+orderList.getTotalPrice()+" 입니다.");
    break;
    } else {
    System.out.println("다시 메뉴판으로 이동합니다");}

💔 문제점

장바구니까지 만들고나니 코드가 엄청나게 복잡한 것을 알았다..

  • if-else문의 중첩이 많음
  • 필요없는 HashMap 사용
  • 기능별로 분리되지 못한 클래스

등등 이런 문제점을 개선해보자 !!

profile
@lim_128

0개의 댓글