TIL - 키오스크 과제1 , 2(일부)

Jiyeong Kim·2025년 1월 13일

TIL

목록 보기
8/24

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

요구사항이 가지는 의도

  • 입력 처리와 간단한 흐름 제어를 복습합니다. (프로그래밍 검증)
  • Scanner 활용법, 조건문, 반복문을 재확인하며 입력 데이터를 처리하는 방법 강화

햄버거 메뉴 출력 및 선택하기

  • Scanner를 사용하여 여러 햄버거 메뉴를 출력합니다.
  • 제시된 메뉴 중 입력받은 숫자에 따라 다른 로직을 실행하는 코드를 작성합니다.
  • 반복문을 이용해서 특정 번호가 입력되면 프로그램을 종료합니다.

Lv1을 구현하면 터미널에 이렇게 보여집니다.

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

프로그램을 종료합니다.







나의 코드

계산기 문제의 코드를 활용해서 제품을 여러개 선택할 수 있는 키오스크를 만들고 싶었다. 이때 while 문 밖으로 나왔을때 다시 빠져나온 while문을 작동시키는 방법을 찾지 못했다.

클래스가 있어야 할 것 같아 일단은 1단계에서 요구하는 부분만 만족 시키도록 만들었다.

package com.example.kiosk.lv1;

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        boolean keepRunning = true;

        while (keepRunning) {
            System.out.println("번호를 입력하여 주문을 해주세요.\n" +
                    "[ SHAKESHACK MENU ]\n" +
                    "1. ShackBurger   | W 6.9 | 토마토, 양상추, 쉑소스가 토핑된 치즈버거\n" +
                    "2. SmokeShack    | W 8.9 | 베이컨, 체리 페퍼에 쉑소스가 토핑된 치즈버거\n" +
                    "3. Cheeseburger  | W 6.9 | 포테이토 번과 비프패티, 치즈가 토핑된 치즈버거\n" +
                    "4. Hamburger     | W 5.4 | 비프패티를 기반으로 야채가 들어간 기본버거\n" +
                    "0. 종료                   | 종료");

            int firstFunc = sc.nextInt();

            if (firstFunc ==1 ) {
               System.out.println("ShackBurger(을)를 선택하였습니다.");
                break;
            }
            if (firstFunc ==2 ) {
                System.out.println("SmokeShack(을)를 선택하였습니다.");
                break;
            }
            if  (firstFunc ==3 ) {
                System.out.println("Cheeseburger(을)를 선택하였습니다.");
                break;
            }
            if  (firstFunc == 4 ) {
                System.out.println("Hamburger (을)를 선택하였습니다.");
                break;
            }
            if (firstFunc > 4 ) {
                System.out.println("다시 입력해주세요.");
                continue;
            }
            if (firstFunc == 0) {
                keepRunning = false;
                break;
            }
        }
        System.out.println("키오스크를 종료합니다.");
    }
}

작동은 되지만 기능 하나를 수행하면 그대로 종료될 수 밖에 없는 구조이다.

와중에 break;가 전부 if절 밖으로 나와있어서 계속 오류가 떴었다.
그래도 오늘은 바로 오류를 교정했다.













Lv2. 객체 지향 설계를 적용해 햄버거 메뉴를 클래스로 관리하기

요구사항이 가지는 의도

  • 객체 지향 개념을 학습하고, 데이터를 구조적으로 관리하며 프로그램을 설계하는 방법을 익힙니다.
  • 햄버거 메뉴를 MenuItem 클래스와 List를 통해 관리합니다.
  • 설명 : 개별 음식 항목을 관리하는 클래스입니다. 현재는 햄버거만 관리합니다.
  • 클래스는 이름, 가격, 설명 필드를 갖습니다.

main 함수에서 MenuItem 클래스를 활용하여 햄버거 메뉴를 출력합니다.

  • MenuItem 객체 생성을 통해 이름, 가격, 설명을 세팅합니다.
    • 키워드: new
    • List를 선언하여 여러 MenuItem을 추가합니다.
      • List<MenuItem> menuItems = new ArrayList<>();
    • 반복문을 활용해 menuItems를 탐색하면서 하나씩 접근합니다.

구조 예시

public static void main(String[] args) {
		// List 선언 및 초기화
		// add 함수를 통해 new MenuItem(이름, 가격, 설명) List에 삽입
		// (add 보다 더 좋은 방법이 있다면 그렇게 해도 됩니다!)
		
		// Scanner 선언
		
		// 반복문을 활용해 List 안에 있는 MenuItem을 하나씩 출력
		// 숫자를 입력 받기
		// 입력된 숫자에 따른 처리
			// 프로그램을 종료
			// 선택한 메뉴 : 이름, 가격, 설명
}
  • 헷갈린 부분: main 클래스에 위의 예시와 같이 List의 선언과 초기화가 이루어져도 되는지 등이 헷갈렸다.(당연히 됨 똑같이 클래스임) 처음 코드를 짤 때 예시를 무시하고 리스트를 MenuItem 클래스에 선언하는 등 삽질을 했다.
  • 결국 중간에 멈추고 다시 기본서를 열었다.
  • 처음부터 클래스파트까지 읽었는데 더 이상 시간을 낭비하고 싶지 않아서 할 수 있는 곳까지만 진행을 했다.

나의 코드

MenuItem 클래스는 다음과 같다.

package com.example.kiosk.lv2;


public class MenuItem {
    private String name;
    private Double price;
    private String description;
    // 이름 가격 설명 필드
    //생성자
    public MenuItem(String name, Double price, String description) {
        this.name = name;
        this.price = price;
        this.description = description;
    }
}

여기까지 고쳤을땐 간단한데 왜 private final List<블라블라>블라블라 쓰고 고생했는지 모르겠다.

문제는 Main 클래스이다.

List<MenuItem> menuItems = new ArrayList<>();

이건 냅다 집어넣었는데, lv1에서 작성했던 while 문을 어떻게 활용하고 add를 어떤식으로 활용해야할 지 모르겠다.

밤 사이 잘 정리해서 내일은 튜터님에 여쭤봐야겠다..

profile
해봅시다

0개의 댓글