계산기 과제를 마무리하고 바로 키오스크 과제를 하며 복습했다.
총레벨은 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를 탐색하면서 하나씩 접근합니다.
- MenuItem 객체 생성을 통해 이름, 가격, 설명을 세팅합니다.
▼구조예시
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 |