키오스크 CLI 프로젝트 - Lv2

Modesty·2025년 3월 14일
0
post-thumbnail

📌 프로젝트 요구사항

✅ 기본적인 요구사항은 다음과 같습니다.

  • 사용자 입력을 처리하고, 조건문과 반복문을 통해 흐름을 제어

  • 객체 지향 설계를 적용해 메뉴를 클래스로 관리하기

  • 데이터를 구조적으로 관리하기 위해 MenuItem 클래스를 생성하고, List를 활용해 메뉴 항목을 저장 및 관리

  • MenuItem 클래스의 속성과 생성자 메서드 구현
    List<MenuItem>을 사용해 여러 메뉴 항목을 동적으로 추가

💻 프로젝트 구조

CLI 키오스크 프로젝트의 구성입니다.

📂 src
 └─ 📂 common
 │   ├── Menu.java 		(메뉴 Enum 관리 클래스)
 │   ├── MenuItem.java 	(메뉴 정보 관리 클래스)
 │	 └── test.txt 		(음식 메뉴 목록 관리)
 └── 📂 lv2.kiosk
     	└── Main.java 		(메인 로직 구현) 

📌프로젝트 개요

  • 패키지 구조: lv2.kiosk와 common 패키지로 나뉘어 있으며, common 패키지에는 공통 클래스(Menu, MenuItem)와 햄버거 메뉴가 저장된 텍스트 파일이 있습니다.

  • 파일 입력: 메뉴 데이터는 공용패키지의 test.txt 파일에서 읽어옵니다.

  • 기능: 메뉴 보기, 장바구니, 결제하기, 종료하기의 4가지 메인 메뉴가 있습니다. ( -lv2 기준 메뉴보기만 구현)

  • 프로그램은 BufferedReader를 사용해 사용자 입력을 받고, enum과 List를 활용해 메뉴를 관리합니다.

📌 주요 코드 설명

1️⃣ Main 클래스

  • printAsciiArt(): 키오스크 시작을 알리는 아스키 아트 출력
  • printMenu(): 키오스크 메뉴 출력
  • getMenuListFromFile(): InputStream을 매개변수로 받아 List<MenuItem>를 반환
  • viewMenuList(): 음식 메뉴 목록 출력
  • isMenuNumInteger(): 사용자 입력이 유효한 정수인지 유효성 검사

2️⃣ Menu(ENUM)클래스
Menu는 키오스크 메뉴를 정의한 열거형으로, 각 메뉴(키오스크) 설명과 코드(정수)를 매핑합니다.

  • valueOfCode() : 입력값을 열거형 값으로 변환하며, 유효하지 않은 입력에 대해 예외(IllegalArgumentException) 발생

3️⃣ common.MenuItem 클래스

package common;

public class MenuItem {
    private final String name;
    private double price;
    private String menuInfo;

    public MenuItem(String name, String price, String menuInfo) {
       ...
        this.name = name;
        this.price = menuPrice;
        this.menuInfo = menuInfo;
    }

    public String getName() { ...}

    public double getPrice() { ...}

    public String getMenuInfo() { ...}

}

♾️전체 동작 흐름


while(MainFlag){
	메뉴 보기 
    printMenu();
    switch(){
    	case VIEW_MENU 	-> 음식 메뉴 보기
        	while(){
            	switch(Menu) 
                {
                메뉴 리스트 선택 및 출력
                }
            }
        case CART 		-> 장바구니
        case CHECKOUT 	-> 주문(결제)
        case EXIT 		-> 종료

메인 루프에서 사용자 입력을 받아 선택한 메뉴에 따라 동작을 처리
Menu(ENUM) 을 사용해 입력값을 매핑하고, switch 문으로 분기 처리

⚠️예외 처리:

  • 파일 로드 실패 시 "파일을 찾을 수 없습니다!" 메시지 출력.
  • 잘못된 입력(숫자가 아닌 값, 범위 외 입력)에 대해 메시지 출력 후 재입력 유도.

변경된 점

기존 과제 Lv1 → Lv2

기존 lv1에서는 String 변수들을 사용해서 음식의 정보를 관리했지만, lv2에서는 MenuItem 클래스를 사용하여 관리합니다.

추가로 Main클래스가 있는 lv.kiosk 패키지에서 관리했던 test.txt파일을 공용 패키지인 common 패키지에 넣어 다른 lv.kiosk에서도 사용할 수 있도록 수정했습니다.

예외 처리를 추가했습니다.

  • 오입력 예외처리
  • 파일 로드 실패시 예외처리
profile
마음 다잡기

0개의 댓글