키오스크 프로젝트 Lv3

서연·2025년 5월 1일

Java

목록 보기
26/36

✅ 객체 지향 설계를 적용해 순서 제어를 클래스로 관리

⚙️ 구조

  • Kiosk 클래스 생성하기
    • 설명: 키오스크 프로그램의 메뉴를 관리하고 사용자 입력을 처리하는 클래스이다.
    • MenuItem을 관리하는 리스트가 필드로 존재한다.
    • main 함수에서 관리하던 입력과 반복문 로직은 이제 start 함수를 만들어 관리한다.
    • List<MenuItem> menuItemsKiosk 클래스 생성자를 통해 값을 할당한다.
      • Kiosk 객체를 생성하고 사용하는 main 함수에서 객체를 생성할 때 값을 넘겨준다.

  • 요구사항에 부합하는지 검토
    • 키오스크 프로그램을 시작하는 메서드가 구현되어야 한다.
      • 콘솔에 햄버거 메뉴를 출력한다.
      • 사용자의 입력을 받아 메뉴를 선택하거나 프로그램을 종료한다.
      • 유효하지 않은 입력에 대해 오류 메시지를 출력한다.
      • 0을 입력하면 프로그램이 ‘뒤로가기’되거나 ‘종료’된다.

📄 코드

Lv3Main.java

package Lv3;

public class Lv3Main {
    public static void main(String[] args) {
        Lv3Kiosk lv3Kiosk = new Lv3Kiosk();

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

        lv3Kiosk.start(); // Lv3Kiosk 에 있는 start 함수 실행
    }
}

Lv3MenuItem.java

package Lv3;

public class Lv3MenuItem {

    // 1. 속성
    String name;
    double price;
    String foodDetails;

    // 2. 생성자
    public Lv3MenuItem(String name, double price, String foodDetails){
        this.name = name;
        this.price = price;
        this.foodDetails = foodDetails;

    }

    // 3. 기능
    // 주소값을 출력하는 것이 아닌 리스트안에 들어있는 값을 출력하기 위해 toString 메서드 작성
    public String toString(){
        return name + " | " + "W" + price + " | " + foodDetails;
    }
}

Lv3Kiosk.java

package Lv3;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Lv3Kiosk { // 키오스크 프로그램의 메뉴를 관리하고 사용자 입력을 처리하는 클래스
    // 1. 속성
    List<Lv3MenuItem> menuItems = new ArrayList<>();

    // 2. 생성자

    // 3. 기능(메서드)
    public void start() { // 입력과 반복문 로직
        Scanner scanner = new Scanner(System.in);

        System.out.print("햄버거 메뉴를 보시려면 'hamburger'를 입력해주세요. : ");
        String shakeshackMenu = scanner.nextLine();
        if (!shakeshackMenu.equals("hamburger")) {// 다른 문자를 입력했을 시 다시 입력
            while (true) {
                System.out.println("다시 입력해주세요.");
                System.out.print("햄버거 메뉴를 보시려면 'hamburger'를 입력해주세요. : ");
                shakeshackMenu = scanner.nextLine();
                if (shakeshackMenu.equals("hamburger")) break;
            }
        }

        // 리스트에 들어가 있는 값을 for문을 통해 출력
        System.out.println("[ SHAKESHACK MENU ]");
        for (int i = 0; i < menuItems.size(); i++) {
            System.out.print(i + 1 + ". ");
            System.out.println(menuItems.get(i));
        }
        System.out.println("0. 종료");

        int num; // 메뉴를 선택하기 위한 숫자 변수 생성

        do { // 0을 입력하기 전까지 원하는 메뉴 선택
            System.out.print("\n원하는 메뉴를 선택해주세요. (0을 입력하시면 종료됩니다.): ");
            num = scanner.nextInt();
            if (num == 1) {
                System.out.println(menuItems.get(0));
            } else if (num == 2) {
                System.out.println(menuItems.get(1));
            } else if (num == 3) {
                System.out.println(menuItems.get(2));
            } else if (num == 4) {
                System.out.println(menuItems.get(3));
            }
        } while (num != 0);
        System.out.println("프로그램을 종료합니다."); // 0을 입력해 do-while 문을 빠져나왔을 때 실행

    }
}

💡 느낀점

main에서 모든 로직을 처리하는 방식이 아닌 각 기능을 명확히 분리하여 Kiosk 클래스에서 관리하도록 하니 코드의 가독성과 유지보수성이 향상된 것을 느꼈다. 유효하지 않은 입력 처리와 조건을 추가하면서 사용자 경험을 고려한 예외 처리의 중요성도 배우게 되었다.

🔗 GitHub

프로젝트 코드 보러 가기

0개의 댓글