-
[과제] 키오스크 필수 Lv2내일배움캠프/과제 2025. 3. 13. 14:09
✅ Lv2. 객체 지향 설계를 적용해 햄버거 메뉴를 클래스로 관리
1️⃣ 과제 조건
- 요구사항이 가지는 의도
- 객체 지향 개념을 학습하고, 데이터를 구조적으로 관리하며 프로그램을 설계.
- 햄버거 메뉴를 MenuItem 클래스와 List를 통해 관리.
- 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을 하나씩 출력 // 숫자를 입력 받기 // 입력된 숫자에 따른 처리 // 프로그램을 종료 // 선택한 메뉴 : 이름, 가격, 설명 }
2️⃣ 구현 포인트
1. MenuItem 클래스 생성
- MenuItem 클래스를 생성하여 객체로 메뉴를 관리
public class MenuItem { private String menuNm; // 메뉴명 private double price; // 가격 private String desc; // 설명 }
2. MenuItem 생성자를 활용하여 메뉴 List 구현
- MenuItem 생성자를 구성한 후 menuList에 생성과 동시에 추가
public class MenuItem { ... public MenuItem(String menuNm, double price, String desc) { this.menuNm = menuNm; this.price = price; this.desc = desc; } }
public class Main { public static void main(String[] args) { List<MenuItem> menuList = new ArrayList<>(); // 메뉴 List // 메뉴 추가 menuList.add(new MenuItem("ShackBurger", 6.9 ,"토마토, 양상추, 쉑소스가 토핑된 치즈버거")); menuList.add(new MenuItem("SmokeShack", 8.9 ,"베이컨, 체리 페퍼에 쉑소스가 토핑된 치즈버거")); menuList.add(new MenuItem("Cheeseburger", 6.9 ,"포테이토 번과 비프패티, 치즈가 토핑된 치즈버거")); menuList.add(new MenuItem("Hamburger", 5.4 ,"비프패티를 기반으로 야채가 들어간 기본버거")); } }
3. toString @Override
- 사용자에게 메뉴를 어떻게 보여줄지 고민하다 toString 을 Override함
- Lv1에서는 메뉴 별로 간격을 맞추기위해 공백을 추가하였지만, 계속 그럴 수는 없어서 String.format %s를 활용
- %-13s 를 할경우 13만큼의 길이를 갖고 string 을 입력받아 길이가 모자란만큼은 공백으로 채워준다.
@Override public String toString() { return String.format("%-13s | W %-4s | %s", menuNm, price, desc); }
int i = 1; System.out.println("\n[ SHAKESHACK MENU ]\n"); for (MenuItem menuItem : menuList) { System.out.println(i++ + ". " +menuItem.toString()); }
실행 결과
4. List의 get 함수 사용
- 사용자로부터 입력을 받아 menuList에서 get(index)를 하여 메뉴 정보 가져오기
System.out.print("번호를 선택해주세요 : "); String input = br.readLine(); no = Integer.valueOf(input); ... MenuItem selectMenu = menuList.get(no - 1); System.out.printf("선택한 메뉴 : %s | 가격 : W %s | 설명 : %s \n\n", selectMenu.getMenuNm(), selectMenu.getPrice(), selectMenu.getDesc());
3️⃣ 최종 코드
1. Main
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { // 메뉴 List List<MenuItem> menuList = new ArrayList<>(); // 메뉴 추가 menuList.add(new MenuItem("ShackBurger", 6.9 ,"토마토, 양상추, 쉑소스가 토핑된 치즈버거")); menuList.add(new MenuItem("SmokeShack", 8.9 ,"베이컨, 체리 페퍼에 쉑소스가 토핑된 치즈버거")); menuList.add(new MenuItem("Cheeseburger", 6.9 ,"포테이토 번과 비프패티, 치즈가 토핑된 치즈버거")); menuList.add(new MenuItem("Hamburger", 5.4 ,"비프패티를 기반으로 야채가 들어간 기본버거")); int i = 1; System.out.println("\n[ SHAKESHACK MENU ]\n"); for (MenuItem menuItem : menuList) { System.out.println(i++ + ". " +menuItem.toString()); } System.out.println("0. 종료 | 종료\n"); try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) { int no; while (true) { try { System.out.print("번호를 선택해주세요 : "); String input = br.readLine(); no = Integer.valueOf(input); if (no == 0) { // 0 이면 종료 break; } else if (no > menuList.size()) { // 없는 번호 입력 시 exception throw new NumberFormatException(); } MenuItem selectMenu = menuList.get(no - 1); System.out.printf("선택한 메뉴 : %s | 가격 : W %s | 설명 : %s \n\n", selectMenu.getMenuNm(), selectMenu.getPrice(), selectMenu.getDesc()); } catch (NumberFormatException e) { System.out.println("\n! 올바른 번호를 입력해주세요 !\n"); } } } catch (IOException e) { System.out.println("\n! 에러가 발생했습니다 !\n"); } System.out.println("\n프로그램을 종료합니다."); } }
2. MenuItem
package com.example.kiosk.required.lv2; public class MenuItem { private String menuNm; // 메뉴명 private double price; // 가격 private String desc; // 설명 public MenuItem(String menuNm, double price, String desc) { this.menuNm = menuNm; this.price = price; this.desc = desc; } public String getMenuNm() { return menuNm; } public void setMenuNm(String menuNm) { this.menuNm = menuNm; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } public String getDesc() { return desc; } public void setDesc(String desc) { this.desc = desc; } @Override public String toString() { return String.format("%-13s | W %-4s | %s", menuNm, price, desc); } }
'내일배움캠프 > 과제' 카테고리의 다른 글
[과제] 키오스크 필수 Lv4 (0) 2025.03.13 [과제] 키오스크 필수 Lv3 (0) 2025.03.13 [과제] 키오스크 필수 Lv1 (0) 2025.03.13 [과제] 계산기 Lv3 (1) 2025.03.06 [과제] 계산기 Lv2 (0) 2025.03.06 - 요구사항이 가지는 의도