Sparta/Task

키오스크 ( Kiosk ) - Trouble Shooting

hyunjg94 2025. 3. 14. 12:36

1. 개요

JAVA에 익숙해지기 위한 두 번째 과제 Kiosk 만들기~

지금부터 Kiosk Code를 작성하면서 생겼던 문제들과 느낀점을 적어보려고 합니다.

 

 

2. 과정

Code 작성 과정을 전부 남기기 위하여 이번에도 저번과 동일하게 크게 4단계로 구성해보았습니다.

 

 

◎ Lv1 : 기본적인 키오스크를 프로그래밍해보자

○ 간단하게 반복문과 Switch 문을 사용하여 피자 메뉴를 띄우고 선택까지 Code 작성

 

◎ Lv2 : 객체 지향 설계를 적용해 피자, 사이드 메뉴를 클래스로 관리하기

MenuItem Class를 만들어 제품의 이름, 가격, 설명에 대한 필드를 갖기

Main에서 MenuItem에 대한 객체를 생성하여 관리

 

◎ Lv3 : 객체 지향 설계를 적용해 순서 제어를 클래스로 관리하기

Main Code는 Kiosk로~ Start 함수를 불러 간략하게 표현

 

◎ Lv4 : 객체 지향 설계를 적용해 음식 메뉴와 주문 내역을 클래스 기반으로 관리하기

Menu Class 생성 - Category와 MenuItem 관리는 Menu에서 진행

 

 

 

 

3. Trouble Shooting

 Code 순서

◎ 원인 : Lv1 ~ Lv4 까지 진행하면서 중간에 새로운 객체를 생성하는 과정에서 오류

List<MenuItem> lv4PizzaList = new ArrayList<>();
lv4PizzaList.add(new MenuItem("베이컨 포테이토", 21500, "포테이토 큐브!"));
lv4PizzaList.add(new MenuItem("갈릭버터 쉬림프", 21900, "고소한 풍미가 가득!"));
lv4PizzaList.add(new MenuItem("치즈 킹\t\t", 21900, "치즈 끝판왕"));

Menu lv4PizzaCategory = new Menu("피자",lv4PizzaList);

◎ 결과 : Code 위치도 제 위치에 작성해야 작동합니다.

 

InputMismatchException

◎ 원인1 : 메뉴의 번호를 입력할 때 실수로 인한 영어 입력!

 

try {
                // 🛒 메뉴 선택 안내
                System.out.print("👉 선택하실 메뉴의 번호를 입력해주세요: ");
                int lv4selectNumber = lv4scanner.nextInt();

                switch (lv4selectNumber) {
                    case 0:
                        System.out.println("🛑 프로그램을 종료합니다.");
                        return;
                    case 1:
                        showMenu(lv4Menu.get(lv4selectNumber - 1));
                        break;
                    case 2:
                        showMenu(lv4Menu.get(lv4selectNumber - 1));
                        break;
                    default:
                        System.out.println("⚠️ 올바른 번호를 입력해주세요.");
                        continue;
                }
            }
            catch(InputMismatchException e){
                System.out.println("숫자를 입력해주세요 :");
                lv4scanner.nextInt();
                break;
            }

◎ 원인2 : try - catch 문 사용 미숙

 int lv4selectNumber;
                // 🛒 메뉴 선택 안내
            while (true) {
                try {
                    System.out.print("👉 선택하실 메뉴의 번호를 입력해주세요: ");
                    lv4selectNumber = lv4scanner.nextInt();
                    break;
                    
                } catch (InputMismatchException e) {
                    System.out.println("❌ 오류: 숫자를 입력해주세요!"); // 에러 메시지 출력
                    lv4scanner.nextLine(); // 버퍼에 남아 있는 잘못된 입력 제거
                }
            }

            if (lv4selectNumber == 0) {
                System.out.println("🖥️ 프로그램을 종료합니다.");
                break;
            } else if (lv4selectNumber > 0 && lv4selectNumber <= lv4Menu.size()) {
                showMenu(lv4Menu.get(lv4selectNumber - 1));
                break;
            } else {
                System.out.println("⚠️올바른 번호를 입력해주세요 :");
                continue;
            }

◎ 결과 : 입력란에 반복문을 사용하면서 try - catch 문 Code 작성. 잘못된 입력이 되었을 때 반복문을 통해 재입력

 

 

 뒤로 가기 동작 오류

while(true) {
            System.out.println("주문하실 메뉴의 번호를 입력해주세요.:");
            int lv4selectItem = lv4scanner.nextInt();

            if (lv4selectItem > 0 && lv4selectItem <= lv4Item.size()) {
                System.out.println("주문하신 메뉴는 " + lv4Item.get(lv4selectItem - 1).getLv4Item() + " 입니다.\n");
                break;
            } else if (lv4selectItem == 0) {
                break;
            } else {
                System.out.println("⚠️ 잘못된 번호입니다. 다시 입력해주세요.");
            }
        }

◎ 원인 : Switch - Case 문을 사용하면서는 break; return; , while 문에서 break; return을 제대로 파악 못함

} else if (lv4selectNumber > 0 && lv4selectNumber <= lv4Menu.size()) {
                showMenu(lv4Menu.get(lv4selectNumber - 1));

◎ 결과: break; 제거 하여 원하는 동작 확인.

 

4. 마무리

해당 과제를 진행하면서 아직 기본이 많이 부족하다는 것을 깨닫게 되었습니다.

반복문 ( For, While ) , 조건문 ( If, Switch ), 예외 처리 등 아직은 지식이 많이 부족하다는 것을 느끼게 되었고, 더욱 더 여러 코드를 작성해보면서 빠른 적응, 다양한 활용을 해봐야겠다고 느끼게 되었습니다.

'Sparta > Task' 카테고리의 다른 글

Spring 심화 주차 개인 과제  (0) 2025.04.18
일정( Calendar_CRUD ) Trouble Shooting  (0) 2025.04.04
일정( Schedule_CRUD ) Trouble Shooting  (0) 2025.03.26
계산기 ( Calculator ) - TroubleShooting  (0) 2025.03.05
Mini Project  (0) 2025.03.03