JAVA
[Java] Lv_3 키오스크
kimyongjun0129
2025. 4. 24. 17:46
요구사항
- ⬜ 요구사항이 가지는 의도
- ⬜ 객체 지향 개념을 학습하고, 데이터를 구조적으로 관리하며 프로그램을 설계하는 방법을 익힙니다.
- ⬜ main 함수에서 관리하던 전체 순서 제어를 Kiosk 클래스를 통해 관리합니다.
- ⬜ Kiosk 클래스 생성하기
- ⬜ 설명: 키오스크 프로그램의 메뉴를 관리하고 사용자 입력을 처리하는 클래스입니다.
- ⬜ MenuItem을 관리하는 리스트가 필드로 존재합니다.
- ⬜ main 함수에서 관리하던 입력과 반복문 로직은 이제 start 함수를 만들어 관리합니다.
- ⬜ List<MenuItem> menuItems 는 Kiosk 클래스 생성자를 통해 값을 할당합니다.
- ⬜ Kiosk 객체를 생성하고 사용하는 main 함수에서 객체를 생성할 때 값을 넘겨줍니다.
- ⬜ 요구사항에 부합하는지 검토
- ⬜ 키오스크 프로그램을 시작하는 메서드가 구현되어야 합니다.
- ⬜ 콘솔에 햄버거 메뉴를 출력합니다.
- ⬜ 사용자의 입력을 받아 메뉴를 선택하거나 프로그램을 종료합니다.
- ⬜ 유효하지 않은 입력에 대해 오류 메시지를 출력합니다.
- ⬜ 0을 입력하면 프로그램이 ‘뒤로가기’되거나 ‘종료’됩니다.
- ⬜ 키오스크 프로그램을 시작하는 메서드가 구현되어야 합니다.
문제 풀이
Lv_1 & Lv_2에서 부분에 대한 설명은 생략하겠다.
Main
더보기
package com.example.kiosk.lv_2;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
Kiosk kiosk = new Kiosk(new ArrayList<>());
kiosk.addMenu("ShackBurger", 6.9, "토마토, 양상추, 쉑소스가 토핑된 치즈버거");
kiosk.addMenu("SmokeShack", 8.9, "베이컨, 체리 페퍼에 쉑소스가 토핑된 치즈버거");
kiosk.addMenu("Cheeseburger", 6.9, "포테이토 번과 비프패티, 치즈가 토핑된 치즈버거");
kiosk.addMenu("Hamburger", 5.4, "비프패티를 기반으로 야채가 들어간 기본버거");
kiosk.start();
}
}
- kiosk를 동작을 start() 메서드로 정의하여, 사용자는 동작 방식을 이해 할 필요 없이 동작할 수 있게 변경하였다.
Kiosk
더보기
package com.example.kiosk.lv_2;
import java.util.InputMismatchException;
import java.util.List;
import java.util.Scanner;
public class Kiosk {
// 속성
List<MenuItem> menuItems;
// 생성자
public Kiosk(List<MenuItem> menuItems) {
this.menuItems = menuItems;
}
// 기능
// 키오스크 동작
public void start() {
int input = 1;
do {
showMenu();
System.out.print("메뉴를 선택하세요 : ");
input = userInput();
if (totalFoodCount() < input) {
System.out.println("음식이 없습니다.");
}
} while(input != 0);
}
// 유저 메뉴 입력 받는 함수
private int userInput() {
Scanner scanner = new Scanner(System.in);
try {
return scanner.nextInt();
} catch(InputMismatchException e) {
System.out.println("올바른 값을 입력하세요.");
scanner.nextLine();
return -1;
}
}
// 메뉴 추가하는 기능
public void addMenu(String foodName, double price, String ingredient) {
menuItems.add(new MenuItem(foodName, price, ingredient));
}
// 메뉴 보여주는 기능
private void showMenu() {
int num = 1;
System.out.println(" [ SHAKESHACK MENU ]");
System.out.println("0. 종료\t\t\t\t | 종료");
for (MenuItem foodInfo : menuItems) {
System.out.println(num++ + ". "
+ foodInfo.getFood_name() + "\t\t | w "
+ foodInfo.getPrice() + "\t "
+ foodInfo.getIngredients());
}
}
// 총 메뉴 갯수 반환하는 기능
private double totalFoodCount() {
return (long) menuItems.size();
}
}
- 기존의 Main에 있던 메뉴를 보여주고 입력받는 반복문을 start() 메서드로 정의하였다. start() 메서드는 모든 동작이 실행되는 메서드이다.
- 기존의 Main에 있던 유저한테 입력을 받는 userInput() 메서드를 Kiosk로 이동하였다.
위 두 가지 방식을 통해 kiosk와 사용자를 완전히 분리하였다.
MenuItem
더보기
package com.example.kiosk.lv_2;
public class MenuItem {
private String food_name;
private double price;
private String ingredients;
public MenuItem(String food_name, double price, String ingredients) {
this.food_name = food_name;
this.price = price;
this.ingredients = ingredients;
}
public String getFood_name() {
return food_name;
}
public double getPrice() {
return price;
}
public String getIngredients() {
return ingredients;
}
}