JAVA

JAVA - 키오스크 과제(Lv1, Lv2)

윤승 2025. 3. 10. 19:51

계산기 과제를 마무리하고 바로 키오스크 과제를 하며 복습했다.

총레벨은 5까지 있고, 오늘은 2까지 해봤다.

 

Lv 1. 기본적인 키오스크를 프로그래밍

레벨 당 기능 요구 

  • 햄버거 메뉴 출력 및 선택하기
    •  실행시 햄버거 메뉴가 표시되고, 이후 Scanner로 숫자를 입력받아서 메뉴를 선택할 수 있다.
    •  제시된 메뉴 중 입력받은 숫자에 따라 다른 로직을 실행하는 코드를 작성합니다.
    • 반복문을 이용해서 특정 번호가 입력되면 프로그램을 종료합니다.
package kiosk.Lv1;

import java.util.Scanner;

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


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


            int choice = sc.nextInt();

            switch (choice) {
                case 1:
                    System.out.println("ShackBurger를 선택하셨습니다.");
                    break;
                case 2:
                    System.out.println("SmokeShack를 선택하셨습니다.");
                    break;
                case 3:
                    System.out.println("Cheeseburger를 선택하셨습니다.");
                    break;
                case 4:
                    System.out.println("Hamburger를 선택하셨습니다.");
                    break;
                case 0:
                    System.out.println("프로그램을 종료합니다.");
                    sc.close();
                    return;
                default:
                    System.out.println("다시 입력하세요");
            }

        }
    }
}

 

실행결과 

 

Lv1단계는 요구사항대로 while과 switch문을 사용하여 간단하게 구현해 봤다.


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

  • MenuItem 클래스 생성하기
    • 설명 : 개별 음식 항목을 관리하는 클래스입니다. 현재는 햄버거만 관리합니다.
    • 클래스는 이름, 가격, 설명 필드를 갖습니다.
  • main 함수에서 MenuItem 클래스를 활용하여 햄버거 메뉴를 출력합니다.
    •  MenuItem 객체 생성을 통해 이름, 가격, 설명을 세팅합니다.
      • 키워드: new
    •  List를 선언하여 여러 MenuItem을 추가합니다.
      • List<MenuItem> menuItems = new ArrayList<>();
    • 반복문을 활용해 menuItems를 탐색하면서 하나씩 접근합니다.

▼구조예시

public static void main(String[] args) {
		// List 선언 및 초기화
		// add 함수를 통해 new MenuItem(이름, 가격, 설명) List에 삽입
		
		// Scanner 선언
		
		// 반복문을 활용해 List 안에 있는 MenuItem을 하나씩 출력
		// 숫자를 입력 받기
		// 입력된 숫자에 따른 처리
			// 프로그램을 종료
			// 선택한 메뉴 : 이름, 가격, 설명
}

1. MenuItem.java

 

먼저 MenyItem 클래스를 선언 후 햄버거의 이름, 가격, 내용을 설정했다.

public class MenuItem {
    private String name;
    private double price;
    private String content;

    public MenuItem(String name, double price, String content) {
        this.name = name;
        this.price = price;
        this.content = content;
    }

 

그리고 메뉴정보를 출력하는 메서드도 생성했고, 게터 메서드를 통해 필드 값을 반환하도록 캡슐화하였다.

 public void printMenu() {
        System.out.println(name + " - " + price + "원: " + content);
    }

    public String getName() {
        return name;
    }

    public double getPrice() {
        return price;
    }

    public String getContent() {
        return content;
    }

 

 

2. Main.java

 

메뉴 리스트 생성

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

 

add함수를 사용하여 menuItems 리스트에 추가

menuItems.add(new MenuItem("ShackBurger", 6.9, "토마토, 양상추, 쉑소스가 토핑된 치즈버거"));
menuItems.add(new MenuItem("SmokeShack", 8.9, "베이컨, 체리 페퍼, 쉑소스가 토핑된 치즈버거"));
menuItems.add(new MenuItem("Cheeseburger", 6.9, "포테이토 번과 비프패티, 치즈가 토핑된 치즈버거"));
menuItems.add(new MenuItem("Hamburger", 5.4, "비프패티를 기반으로 야채가 들어간 기본버거"));

 

반복문(조건)

for문을 사용하여 메뉴를 모두 출력하도록 했다.

System.out.println("[ SHAKESHACK MENU ]");
for (int i = 0; i < menuItems.size(); i++) {
    MenuItem menuItem = menuItems.get(i);
    System.out.printf("%d. %s | W %.1f | %s%n", i + 1, menuItem.getName(), menuItem.getPrice(), menuItem.getContent());
}  //i + 1: 메뉴 번호 (1부터 시작)
System.out.println("0. 종료");
System.out.print("원하는 숫자를 입력하세요: ");

 

사용자의 입력을 int 값으로 받고 if문을 사용하여 입력받은 int값으로 조건주기

그리고 try문을 사용해 프로그램 비정상적으로 종료되는 에러를 해결했다.

      int choice = sc.nextInt();

                /*
                * if (choice >= 1 && choice <= menuItems.size()) 사용자가 올바른 범위 내에서 숫자를 입력했는지 검증
                * MenuItem menuItem = menuItems.get(choice - 1) 리스트의 인덱스는 0부터 시작하기때문
                * */
                if (choice >= 1 && choice <= menuItems.size()) {
                    MenuItem menuItem = menuItems.get(choice - 1);
                    menuItem.printMenu();
                } else if (choice == 0) {
                    System.out.println("프로그램을 종료합니다.");
                    sc.close();
                    return;
                } else {
                    System.out.println("다시 입력하세요");
                }

 

 

▼전체코드 (MenuItem 클래스, Main 클래스)

// © MenuItem.java
public class MenuItem {
    private String name;
    private double price;
    private String content;

    public MenuItem(String name, double price, String content) {
        this.name = name;
        this.price = price;
        this.content = content;
    }

    public void printMenu() {
        System.out.println(name + " - " + price + "원: " + content);
    }

    public String getName() {
        return name;
    }

    public double getPrice() {
        return price;
    }

    public String getContent() {
        return content;
    }

}

// © Main.java

public class Main {
    public static void main(String[] args) {
        List<MenuItem> menuItems = new ArrayList<>();

        menuItems.add(new MenuItem("ShackBurger", 6.9, "토마토, 양상추, 쉑소스가 토핑된 치즈버거"));
        menuItems.add(new MenuItem("SmokeShack", 8.9, "베이컨, 체리 페퍼, 쉑소스가 토핑된 치즈버거"));
        menuItems.add(new MenuItem("Cheeseburger", 6.9, "포테이토 번과 비프패티, 치즈가 토핑된 치즈버거"));
        menuItems.add(new MenuItem("Hamburger", 5.4, "비프패티를 기반으로 야채가 들어간 기본버거"));

        Scanner sc = new Scanner(System.in);


        while (true) {
            try {
                System.out.println("[ SHAKESHACK MENU ]");
                for (int i = 0; i < menuItems.size(); i++) {
                    MenuItem menuItem = menuItems.get(i);
                    System.out.printf("%d. %s | W %.1f | %s%n", i + 1, menuItem.getName(), menuItem.getPrice(), menuItem.getContent());
                }
                System.out.println("0. 종료");
                System.out.print("원하는 숫자를 입력하세요: ");

                int choice = sc.nextInt();

                /*
                * if (choice >= 1 && choice <= menuItems.size()) 사용자가 올바른 범위 내에서 숫자를 입력했는지 검증
                * MenuItem menuItem = menuItems.get(choice - 1) 리스트의 인덱스는 0부터 시작하기때문
                * */
                if (choice >= 1 && choice <= menuItems.size()) {
                    MenuItem menuItem = menuItems.get(choice - 1);
                    menuItem.printMenu();
                } else if (choice == 0) {
                    System.out.println("프로그램을 종료합니다.");
                    sc.close();
                    return;
                } else {
                    System.out.println("다시 입력하세요");
                }
            } catch (Exception e) {
                System.out.println("올바른 숫자를 입력하세요.");
                sc.nextLine();

            }
        }
    }
}

 

▼실행결과

'JAVA' 카테고리의 다른 글

JAVA - 스트림(Stream)  (0) 2025.03.13
JAVA - 동등성과 동일성  (0) 2025.03.12
JAVA - 추상클래스  (0) 2025.03.07
JAVA - Optional  (0) 2025.03.06
JAVA 계산기 트러블 슈팅  (3) 2025.03.05