키오스크 CLI 프로젝트 - Lv1

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

📌 프로젝트 요구사항

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

Lv 1. 기본적인 키오스크 구현

  • 사용자가 콘솔에서 음식점 메뉴를 선택할 수 있는 키오스크 구현

  • 입력 처리를 통해 메뉴 선택 및 실행

  • 종료 옵션 추가 (특정 입력 시 프로그램 종료)

  • 예외 처리를 통한 안정적인 실행 보장

💻 프로젝트 구조

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

📂 lv1.kiosk
 └─ 📂 common
 │	 └── Menu.java (메뉴 Enum 관리)
 └── 📂 lv1.kiosk
     ├──test.txt (음식 메뉴 목록 저장)
     └── Main.java (메인 로직 구현) 
  • Menu.java: enum을 활용하여 메인에서 사용할 키오스크 메뉴를 정의

  • Main.java: 사용자 입력을 처리하고, 키오스크 로직을 수행

  • test.txt: 파일을 통해 음식 메뉴 데이터를 관리

  • 모든 레벨패키지에서 사용할 MenuEnum클래스를 공용패키지인 common에 생성했습니다.

📌 주요 코드 설명

1️⃣ Menu Enum 정의

메뉴 목록을 enum으로 선언하여 코드의 가독성과 유지보수성을 높였습니다.

package common;

public enum Menu {
    VIEW_MENU("메뉴 보기", 1),
    CART("장바구니", 2),
    CHECKOUT("결제하기", 3),
    EXIT("종료", 4);

    private final String description;
    private final int code;

    Menu(String description, int code) {...}

    public String getDescription() {...}
    public int getCode() {...}
    
    public static Menu valueOfCode(int code) {
        for (Menu menu : Menu.values()) {
            if (menu.getCode() == code) {
                return menu;
            }
        }
        throw new IllegalArgumentException("잘못된 코드입니다! → " + code);
    }
}

2️⃣ Main 클래스

BufferedReader를 사용하여 입력을 받고, while 문을 통해 키오스크의 흐름을 제어합니다.

switch 문을 활용하여 선택된 메뉴에 따라 동작을 수행합니다.

public class Main {
    public static void main(String[] args) throws Exception {
        boolean mainFlag = true;
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        while (mainFlag) {
            printMenu();
            System.out.print("입력 >> ");
            String input = br.readLine();
            if (!isInteger(input)) continue;
            
            try {
                Menu selectedMenu = Menu.valueOfCode(Integer.parseInt(input));
                switch (selectedMenu) {
                    case VIEW_MENU:
                        displayMenu();
                        break;
                    case CART:
                        System.out.println("장바구니 화면입니다.");
                        break;
                    case CHECKOUT:
                        System.out.println("결제 화면입니다.");
                        break;
                    case EXIT:
                        mainFlag = false;
                        break;
                }
            } catch (IllegalArgumentException e) {
                System.out.println("잘못된 입력입니다! → " + e.getMessage());
            }
        }
    }
}

💡 특징적인 기능

  • 파일 기반 메뉴 관리: 텍스트 파일을 읽어와 메뉴를 표시합니다.
  InputStream inputStream = Main.class.getClassLoader().getResourceAsStream("test.txt");
  List<String> menuList = getMenuListFromFile(inputStream);
  
  static List<String> getMenuListFromFile(InputStream inputStream) throws Exception {
      
        List<String> menuList = new ArrayList<>();
        if (inputStream != null) {
            BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
            String line;
            // 파일에 저장된 메뉴들 한 줄씩 출력
            while ((line = br.readLine()) != null) {
                menuList.add(line);
            }
            br.close();
        } else {
            System.out.println("파일 없음");
        }
        return menuList;
    }

⚠️ 예외 처리

1️⃣ 숫자가 아닌 값 입력

  • "입력이 올바르지 않습니다!" 메시지를 출력 후 재입력 유도

2️⃣ 존재하지 않는 메뉴 번호

  • IllegalArgumentException을 발생시키고 오류 메시지를 출력

3️⃣ 메뉴 파일이 없는 경우

  • "파일 없음" 메시지를 출력

→ 예외 처리를 통해 프로그램이 비정상적으로 종료되지 않도록 처리하였습니다.

profile
마음 다잡기

0개의 댓글