[TIL]키오스크 만들기(2025-03-10)

2025. 3. 10. 17:58·TIL

오늘 TIL 은 개인으로 만든 키오스크 구현을 정리할려고 한다.

필수 기능까지 구현하였고 추후에 장바구니 기능,Enum 활용 등 추가 예정이다.

 

📃 필수 요구사항

✅ 기능 설명

  1. 메인 메뉴판 화면: 사용자는 메인 메뉴에서 카테고리를 선택할 수 있으며, 주문 및 종료 옵션이 제공된다.
  2. 상품 메뉴판 화면: 카테고리를 선택하면 해당 카테고리의 메뉴가 출력됩니다.
  3. 구매 화면: 사용자가 메뉴를 선택하면 장바구니에 추가할지 확인하는 메시지가 표시됩니다. 추가할 경우 장바구니에 추가됩니다.
  4. 주문 화면:장바구니의 내용과 총 가격이 출력됩니다. 사용자가 주문할 경우 주문이 완료되고 대기번호가 발급

 

✅ 클래스 설명

Main 클래스

역할: 프로그램의 진입점으로, 전체 애플리케이션을 실행하는 주체
책임: 
메뉴 객체를 생성하고 초기화하며, Kiosk 객체를 생성하여 애플리케이션의 시작을 담당

 

Kiosk 클래스

역할: 사용자와 상호작용하는 주체로, 메뉴와 장바구니 관리 기능을 제공
책임:
메뉴를 출력하고, 사용자의 선택을 처리

         장바구니에 메뉴 항목을 추가하거나, 주문 및 취소를 관리
         사용자로부터 입력을 받아 프로그램의 흐름을 제어

 

Menu 클래스

역할: 특정 카테고리의 메뉴 항목을 관리하는 객체
책임:
카테고리 이름과 해당 카테고리에 포함된 메뉴 항목 리스트를 관리
         메뉴 항목을 추가하고, 메뉴를 출력하는 기능을 제공

 

MenuItem 클래스

역할: 개별 메뉴 항목을 나타내는 데이터 객체
책임:
메뉴 항목의 이름, 가격, 설명을 저장하고, 이를 반환하는 메소드를 제공

 

 


 

MenuItem 클래스

우선 MenuItem 에서 항목의 이름,가격 그리고 설명을 저장할 수 있는 데이터 객체 클래스를 생성하였다.

더보기
public class MenuItem {
    private final String name;
    private final Double price;
    private final String content;

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

    //name 값 추출
    public String getName() {
        return name;
    }

    //price 값 추출
    public Double getPrice() {
        return price;
    }

    //content 값 추출
    public String getContent() {
        return content;
    }
}

 

Menu 클래스

MenuItem 클래스를 만들었다면 관리하는 클래스가 필요하다.여기엔 버거 메뉴,음료 메뉴 등 각 카테고리 내에 여러 MenuItem 을 포함한다.

또한 나중에 키오스크에서 카테고리를 메뉴에 보여줘야 하기 때문에 카테고리 이름을 반환하는 메서드가 구현되어야 한다.

더보기
import java.util.ArrayList;
import java.util.List;

public class Menu {
   String category;
   List<MenuItem> menuItemList;

   public Menu(String category){
       this.category = category;
       this.menuItemList = new ArrayList<>();
   }

   //Menuitem 을 menuItemList에 추가하는 메소드
   public void addMenuItem(MenuItem item){
       menuItemList.add(item);
   }

   //카테고리 이름 추출
   public String getCategoryName(){
       return category;
   }

   //메뉴 보여주기
   public void viewMenu(){
       System.out.println("[ " + category + " MENU ]");
       for (int i = 0; i < menuItemList.size(); i++) {
           MenuItem item = menuItemList.get(i);
           System.out.println(i + 1+". "+item.getName() + " | ₩ "+item.getPrice()+ " | "+ item.getContent());
       }
       System.out.println("0. 뒤로가기");
   }

   //MenuItem 리스트 추출
   public List<MenuItem> getMenuItemList(){
       return menuItemList;
   }
}

 

Kiosk 클래스

여기서 사용자와 상호작용을 통해 입력 데이터를 관리하고 전체적인 순서를 제어한다.

더보기

 

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

public class Kiosk {
    private final List<Menu> mainMenu;

    //Kiosk 생성자
    public Kiosk() {
        mainMenu = new ArrayList<>();
    }

    //mainMenu 추가
    public void addMenu(Menu menu) {
        mainMenu.add(menu);
    }

    //Kiosk 시작
    public void start() {
        Scanner sc = new Scanner(System.in);
        int categoryChoice;

        do {
            System.out.println("[ MAIN MENU ]");
            for (int i = 0; i < mainMenu.size(); i++) {
                System.out.println((i + 1) + ". " + mainMenu.get(i).getCategoryName());
            }
            System.out.println("0. 종료");
            categoryChoice = sc.nextInt();

            if (categoryChoice > 0 && categoryChoice <= mainMenu.size()) {
                Menu choiceMenu = mainMenu.get(categoryChoice - 1);
                choiceMenu.viewMenu();

                System.out.println("메뉴를 선택하세요");
                int itemChoice = sc.nextInt();

                if (itemChoice > 0 && itemChoice <= choiceMenu.getMenuItemList().size()) {
                    MenuItem chosenItem = choiceMenu.getMenuItemList().get(itemChoice - 1);
                    System.out.println("선택한 메뉴:"+chosenItem.getName() + " | ₩ "+chosenItem.getPrice()+ " | "+ chosenItem.getContent());
                } else if(itemChoice == 0) {
                     continue;
                }
                else{
                        System.out.println("올바르지 않은 선택입니다.");
                }
            }
        } while (categoryChoice != 0);

        sc.close();
    }
}

 

Main 클래스

카테고리를 생성하고 카테고리 별 menuItem 리스트 생성하여 데이터를 삽입시키고 Kiosk 클래스를 실행시키면 된다.

더보기
public class Main {
    public static void main(String[] args) {
        Menu burgerMenu = new Menu("BURGERS"); // 버거 메뉴 생성
        Menu drinkMenu = new Menu("DRINKING"); // 음료 메뉴 생성
        Menu dessertMenu = new Menu("DESSERT"); // 디저트 메뉴 생성

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

        drinkMenu.addMenuItem(new MenuItem("Cider", 1.0, "사이다"));
        drinkMenu.addMenuItem(new MenuItem("Vanilla Shake", 2.0, "바닐라 쉐이크"));
        drinkMenu.addMenuItem(new MenuItem("Cola", 1.0, "콜라"));

        dessertMenu.addMenuItem(new MenuItem("Potato Fries", 1.5, "감자튀김"));
        dessertMenu.addMenuItem(new MenuItem("Shake Shake Chicken", 3.0, "쉑쉑치킨"));

        Kiosk kiosk = new Kiosk();
        kiosk.addMenu(burgerMenu);
        kiosk.addMenu(drinkMenu);
        kiosk.addMenu(dessertMenu);

        kiosk.start();
    }
}

 

 

✒️ 회고

- 요구사항에 맞게 클래스와 메소드를 구성하는데 꽤 많은 시간이 걸렸다. 요즘  프로그래밍을 연습하면서 많이 느끼는 건 코드를 구현하는 거 보다 요구 사항에 맞는 구성으로 구현하는 게 더 어렵다고 느껴진다.

 

- 요구사항을 이해하기 위해 코딩을 무작정 시작하는 것이 아니라 전체적인 흐름을 생각해서 메모장이나 그림을 이용해 패키지 및 클래스를 그려보고 기능을 담당하는 메소드 별로 정리 해놓으면 시간을 절약할 수 있을 것 같다.

'TIL' 카테고리의 다른 글

[TIL]키오스크 만들기(2025-03-14)  (0) 2025.03.14
[TIL]키오스크 만들기(2025-03-12)  (1) 2025.03.12
[TIL]Lv3 계산기 만들기(2025-02-28)  (0) 2025.02.28
[TIL]Lv2 계산기 만들기(2025-02-26)  (0) 2025.02.26
[TIL]Lv1 계산기 만들기(2025-02-25)  (0) 2025.02.25
'TIL' 카테고리의 다른 글
  • [TIL]키오스크 만들기(2025-03-14)
  • [TIL]키오스크 만들기(2025-03-12)
  • [TIL]Lv3 계산기 만들기(2025-02-28)
  • [TIL]Lv2 계산기 만들기(2025-02-26)
코딩로봇
코딩로봇
금융 IT 개발자
  • 코딩로봇
    쟈니의 일지
    코딩로봇
  • 전체
    오늘
    어제
    • 분류 전체보기 (144) N
      • JavaScript (8)
      • SQL (11) N
      • 코딩테스트 (30)
        • Java (15)
        • SQL (13)
      • Java (10)
      • 프로젝트 (25)
        • 트러블슈팅 (9)
        • 프로젝트 회고 (14)
      • git,Github (2)
      • TIL (38)
      • Spring (18)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    스파르타 코딩 #부트캠프 #첫ot
    java #arraylist #list #배열
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
코딩로봇
[TIL]키오스크 만들기(2025-03-10)
상단으로

티스토리툴바