Lv 1. 기본적인 키오스크 구현
사용자가 콘솔에서 음식점 메뉴를 선택할 수 있는 키오스크 구현
입력 처리를 통해 메뉴 선택 및 실행
종료 옵션 추가 (특정 입력 시 프로그램 종료)
예외 처리를 통한 안정적인 실행 보장
CLI 키오스크 프로젝트의 구성입니다.
📂 lv1.kiosk
└─ 📂 common
│ └── Menu.java (메뉴 Enum 관리)
└── 📂 lv1.kiosk
├──test.txt (음식 메뉴 목록 저장)
└── Main.java (메인 로직 구현)
Menu.java: enum을 활용하여 메인에서 사용할 키오스크 메뉴를 정의
Main.java: 사용자 입력을 처리하고, 키오스크 로직을 수행
test.txt: 파일을 통해 음식 메뉴 데이터를 관리
모든 레벨패키지에서 사용할 MenuEnum클래스를 공용패키지인 common에 생성했습니다.
메뉴 목록을 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);
}
}
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️⃣ 메뉴 파일이 없는 경우
→ 예외 처리를 통해 프로그램이 비정상적으로 종료되지 않도록 처리하였습니다.