본문 바로가기
카테고리 없음

[자바 프로그래밍 기초] 키오스크를 진행하며 느낀 회고록, 트러블슈팅

by codechu 2025. 5. 1.

 

  • 깨달은 점 : 같은 클래스 내에서도 메서드를 분리해서 기능을 구현을 하는게 좀 더 깔끔하게 나뉘고 수정에 용이하다는 걸 알았다.

 

원래 Kiosk 클래스에서 start 메서드에  메뉴를 출력하는 기능과 숫자에 해당하는 메뉴들을 보여주고 과정을 처리하는 걸 전부 넣었는데 4단계를 진행하며  start   메서드는 메인메뉴를 보여주는 것에만 적용하고 1을눌러서 햄버거 메뉴를보여주는 showBurgerMenu  메서드를 만들었다 

 

 

lv.4 뒤로가기 기능 구현

 

[ MAIN MENU ]
1. Burgers
2. Drinks
3. Desserts
0. 종료 | 종료

1 <- // 1을 입력

[ BURGERS MENU ]
1. ShackBurger | W 6.9 | 토마토, 양상추, 쉑소스가 토핑된 치즈버거
2. SmokeShack | W 8.9 | 베이컨, 체리 페퍼에 쉑소스가 토핑된 치즈버거
3. Cheeseburger | W 6.9 | 포테이토 번과 비프패티, 치즈가 토핑된 치즈버거
4. Hamburger | W 5.4 | 비프패티를 기반으로 야채가 들어간 기본버거
0. 뒤로가기

2 <- // 2를 입력


선택한 메뉴: SmokeShack | W 8.9 | 베이컨, 체리 페퍼에 쉑소스가 토핑된 치즈버거
[ MAIN MENU ]
1. Burgers
2. Drinks
3. Desserts
0. 종료 | 종료 0 <- // 0을 입력 프로그램을 종료합니다.

 

 

  • 뒤로가기 기능에 return을 사용한 이유  

메서드내에서의 리턴을 만나면 지금 실행하고 있는 메서드를 종료하고 상위에 호출 메서드로 올라감.

0을 입력받으면 햄버거 메뉴를 보여주는 메서드를 종료하고 햄버거 메뉴메서드를 사용하고 있는 상위 메서드로 올라가서 그 화면을 다시보여줌으로 실행

 

 public void showBurgerMenu() { //버거메뉴만 보여주는 메서드
        menu.showBurgers(); //버거메뉴 보여주고 사용자에게 입력받으면
        int input1 = sc.nextInt();
        try {
            switch (input1) {
                case 1:
                    menu.showBurger(0); //해당 메뉴를 출력하는 메서드
                    break;
                case 2:
                    menu.showBurger(1);
                    break;
                case 3:
                    menu.showBurger(2);
                    break;
                case 4:
                    menu.showBurger(3);
                    break;
                case 0:
                    return; //0을 누르면 해당 메서드를 종료하고 위에 메서드로 돌아감.
                default:
                    System.out.println("잘못된 입력입니다");

 

 

 

 

트러블 슈팅 

[ MAIN MENU]
1. Burgers
2. Drinks
3. Desserts
0. 종료 | 종료 번호를 눌러 주세요

1 //입력값

1.ShackBurger | ₩6.9 | 토마토, 양상추, 쉑소스가 토핑된 치즈버거
2.SmokeShack | ₩8.9 | 베이컨, 체리 페퍼에 쉑소스가 토핑된 치즈버거
3.Cheeseburger | ₩6.9 | 포테이토 번과 비프패티, 치즈가 토핑된 치즈버거
4.Hamburger | ₩5.4 | 비프패티를 기반으로 야채가 들어간 기본버거
0번 누르면 뒤로가기

r // 입력값

숫자로 입력 바랍니다
[ MAIN MENU]
1. Burgers
2. Drinks
3. Desserts
0. 종료 | 종료 번호를 눌러 주세요

 

메인메뉴에서 1번을 누르면 버거로 들어가고 버거메뉴에서 문자를 입력하면 다시 버거메뉴를 골라주세요 하면서 햄버거 메뉴가 나와야 하는데 확인을 해보니 다시 메인메뉴로 돌아갔다.

이상하게 적혀져있는 코드를 다시수정하는 과정이 나에게는 어려워서 간단해 보이는 문제도 한참을 고민한 것 같다.

 

 

 public void showBurgerMenu() { //버거메뉴만 보여주는 메서드
        menu.showBurgers(); //버거메뉴 보여주고 사용자에게 입력받으면
        int input1 = sc.nextInt();
        try {
            switch (input1) {
                case 1:
                    menu.showBurger(0); //해당 메뉴를 출력하는 메서드
                    break;
                case 2:
                    menu.showBurger(1);
                    break;
                case 3:
                    menu.showBurger(2);
                    break;
                case 4:
                    menu.showBurger(3);
                    break;
                case 0:
                    return;
                default:
                    System.out.println("잘못된 입력입니다");
            }
        } catch (InputMismatchException e) {
            System.out.println("입력 오류입니다. 숫자를 입력해주세요.");
            sc.nextLine();
            showBurgerMenu();
        }
    }

 

내가 해결한 방법은

 

문자를 입력하면 다시 버거메뉴를 출력하게 해야하니 CATCH문에 버거전체메뉴가 한 번 더 나올 수 있게 마지막에 넣어주는 방법을 선택했다. 

이렇게 했더니 

 

[ MAIN MENU]
1. Burgers
2. Drinks
3. Desserts
0. 종료 | 종료 번호를 눌러 주세요

1 //입력값

1.ShackBurger | ₩6.9 | 토마토, 양상추, 쉑소스가 토핑된 치즈버거
2.SmokeShack | ₩8.9 | 베이컨, 체리 페퍼에 쉑소스가 토핑된 치즈버거
3.Cheeseburger | ₩6.9 | 포테이토 번과 비프패티, 치즈가 토핑된 치즈버거
4.Hamburger | ₩5.4 | 비프패티를 기반으로 야채가 들어간 기본버거
0번 누르면 뒤로가기

ff //입력값

숫자로 입력 바랍니다

1.ShackBurger | ₩6.9 | 토마토, 양상추, 쉑소스가 토핑된 치즈버거
2.SmokeShack | ₩8.9 | 베이컨, 체리 페퍼에 쉑소스가 토핑된 치즈버거
3.Cheeseburger | ₩6.9 | 포테이토 번과 비프패티, 치즈가 토핑된 치즈버거
4.Hamburger | ₩5.4 | 비프패티를 기반으로 야채가 들어간 기본버거
0번 누르면 뒤로가기

 

문제없이 잘 출력되는것을 확인할 수 있었다.

 

 

 


이번 키오스크 과제를 하며 저번 계산기과제보다는 해야 할 것들이 눈에 보였다. 하지만 실제로 구현하면서 만나게 되는 오류나 생각으로는 문제가 없다고 느꼈지만 막상 실행시켜보면 터지는 오류들을 만나며 힘이 빠졌다. 

그럴수록 객체에 대한 이해와 클래스들 끼리의 연관성, 각자가 해야하는 기능들에 대해 다시 신중하게 생각하며 나눠야 겠다고 느꼈다.

 

이번 과제로 메소드별로 기능을 나누는 것에 대한 장점을 알게된 것 같아 다행이라고 생각했다.