반응형
1. 학습내용 : 키오스크 과제(3~4단계) 과제 , 알고리즘 Daily 풀기
★ 키오스크 과제 3단계 ★
| Lv 3. 기본적인 키오스크를 프로그래밍하기 |
package com.example.kiosk;
public class Main {
public static void main(String[] args) {
// Lv 3. 객체 지향 설계를 적용해 순서 제어를 클래스로 관리하기
// Kiosk 클래스로 관리
Kiosk kiosk = new Kiosk();
kiosk.start();
}
}
Main클래스
package com.example.kiosk;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Kiosk {
// 키오스크 프로그램의 메뉴를 관리하고 사용자 입력을 처리하는 클래스입니다.
// 속성
List<MenuItem> menuItems;
// 생성자
public Kiosk() {
menuItems = new ArrayList<>();
// add함수로 new MenuItem(이름,가격,설명) List에 삽입
menuItems.add(new MenuItem("ShackBurger", 6900 ,"토마토, 양상추, 쉑소스가 토핑된 치즈버거"));
menuItems.add(new MenuItem("SmokeShack", 8900 ,"베이컨, 체리 페퍼에 쉑소스가 토핑된 치즈버거"));
menuItems.add(new MenuItem("Cheeseburger", 6900 ,"포테이토 번과 비브패티, 치즈가 토핑된 치즈버거"));
menuItems.add(new MenuItem("Hamburger", 5400 ,"비프패티를 기반으로 야채가 들어간 기본버거"));
}
// 기능
void start() {
Scanner sc = new Scanner(System.in);
while(true) {
System.out.println("[ SHAKESHACK MENU ]");
for(int i=0; i<menuItems.size(); i++) {
MenuItem item = menuItems.get(i);
System.out.println((i+1) + ". " + item.name + " | " + item.price + "원 | " + item.explain);
}
System.out.println("0. 종료 | 종료");
int choose = sc.nextInt();
if(choose == 0) {
System.out.println("키오스크를 종료합니다.");
break;
} else if (choose >= 1 && choose <= 4) {
MenuItem item = menuItems.get(choose - 1); // 인덱스값이 0부터 시작하기 때문에 -1 을 해야함.
System.out.println(item.name +"를 선택하였습니다. ");
break;
} else {
System.out.println(" 잘못된 선택입니다. ");
}
}
}
}
Kiosk 클래스
package com.example.kiosk;
public class MenuItem {
// 속성
String name;
int price;
String explain;
// 생성자
public MenuItem(String name, int price, String explain) {
this.name = name;
this.price = price;
this.explain = explain;
}
}
MenuItem 클래스
Kisok 클래스가 추가되었다.
[트러블 슈팅]
- 배경: choose 입력값에 BoundsException 현상 발생함.
- 발단: 어떻게 하면 예외가 발생하지 않을지 생각을 해봄.
- 전개: 배열 인덱스는 0부터 시작하기때문에 예외가 발생할수 있다는것을 인지함.
- 위기: 잘못된 지정을하면 또 다른 예외를 발생 시킬수 있을 가능성이 있음.
- 절정: 인덱스 기준으로 맞추기 위해 사용자가 입력한값을 -1을 하게 해봄.
- 결말: 사용자 입력값에 -1을 추가하니, 예외가 발생하지 않고 배열이 범위를 넘지 않게 잘 동작함.
★ 키오스크 과제 4단계 ★
| Lv 4. 객체 지향 설계를 적용해 음식 메뉴와 주문 내역을 클래스 기반으로 관리하기 |
package com.example.kiosk;
public class Main {
public static void main(String[] args) {
// Lv 4. 객체 지향 설계를 적용해 음식 메뉴와 주문 내역을 클래스 기반으로 관리하기
// Menu 객체 생성하면서 카테고리 이름 설정
// Menu 클래스 내 있는 List<MenuItem> 에 MenuItem 객체 생성하면서 삽입
Menu burgers = new Menu("Burgers");
// 해당 카테고리 내에 있는 목록 추가.
burgers.addMenuItem(new MenuItem("ShackBurger", 6900, "토마토, 양상추, 쉑소스가 토핑된 치즈버거"));
burgers.addMenuItem(new MenuItem("SmokeShack", 8900, "베이컨, 체리 페퍼에 쉑소스가 토핑된 치즈버거"));
burgers.addMenuItem(new MenuItem("Hamburger", 5000, "비프패티를 기반으로 야채가 들어간 기본버거"));
Menu drinks = new Menu("Drinks");
drinks.addMenuItem(new MenuItem("Coke", 1500, "콜라"));
drinks.addMenuItem(new MenuItem("ZeroCoke", 1500,"제로콜라"));
drinks.addMenuItem(new MenuItem("Sprite", 2000, "스프라이트"));
Menu deserts = new Menu("Deserts");
deserts.addMenuItem(new MenuItem("Yogurt", 1000, "포동포동한 요거트!"));
deserts.addMenuItem(new MenuItem("Candy", 500, "새콤달콤 사탕"));
// Kiosk 객체 생성
Kiosk kiosk = new Kiosk();
// 키오스크에 메뉴 카테고리 목록 추가.
kiosk.addMenu(burgers);
kiosk.addMenu(drinks);
kiosk.addMenu(deserts);
// Kiosk 내 시작하는 함수 호출
kiosk.start();
}
}
Main 클래스
package com.example.kiosk;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Kiosk {
// 속성
List<Menu> menus;
// 생성자
public Kiosk() {
menus = new ArrayList<>();
}
// 기능
// 메뉴 카테고리에 추가
public void addMenu(Menu menu) {
menus.add(menu);
}
// 작동 시작.
void start() {
Scanner sc = new Scanner(System.in);
while(true) {
System.out.println("[ Main MENU ]");
for(int i=0; i<menus.size(); i++) {
System.out.println((i+1) + ". " + menus.get(i).category);
}
System.out.println("0. 종료 | 종료");
System.out.print("카테고리를 선택하세요(종료 0): ");
int choose = sc.nextInt();
if(choose == 0) {
System.out.println("키오스크를 종료합니다.");
break; // 반복문 종료
} else if (choose >= 1 && choose <= 3) {
menus.get(choose - 1).showSubMenu();
int choose2 = sc.nextInt();
if(choose2 >= 1 && choose2 <= menus.size()) {
// 메소드 체이닝 ( . . . 연결되어서 이어지는 방식 )
System.out.println("\n" + menus.get(choose - 1).menuItems.get(choose2 - 1).name + "를 선택하였습니다.\n");
}
} else {
System.out.println(" 잘못된 선택입니다. ");
}
}
}
}
Kiosk 클래스
package com.example.kiosk;
import java.util.ArrayList;
import java.util.List;
public class Menu {
String category;
List<MenuItem> menuItems;
public Menu(String category) {
this.category = category;
menuItems = new ArrayList<>();
}
public void addMenuItem(MenuItem menuItem) {
menuItems.add(menuItem);
}
void showSubMenu() {
System.out.println("[ " + this.category + " ]");
for(int i=0; i<menuItems.size(); i++) {
System.out.print((i+1) + ". ");
menuItems.get(i).showInfo();
}
System.out.println("0. 뒤로가기");
System.out.print("어떤 것을 먹을까?: ");
}
}
Menu 클래스
package com.example.kiosk;
public class MenuItem {
String name;
int price;
String explain;
public MenuItem(String name, int price, String explain) {
this.name = name;
this.price = price;
this.explain = explain;
}
void showInfo() {
System.out.println(this.name + " | " + this.price + "원 | " + this.explain);
}
}
MenuItem 클래스
추가적인 메소드를 활용하고, Menu 클래스가 추가되었다.
[트러블 슈팅]
- 배경: 과제에 있는 구조형식 대로 맞출려고 하다보니, MainMenu에 카테고리들이 출력되지 않는 현상 발견.
- 발단: 카테고리가 저장되어 있지않아서 출력되지 않음.
- 전개: 해결하던 와중에 kiosk 클래스에 addMenu 메소드를 만들어서, add 함수를 사용해서 Menus에 menu 객체를 추가하는 메소드를 만들어 놓음
- 위기: 또 다시 BoundsException 볼 확률이 있음.
- 절정: add함수를 추가한 메소드를 통해서, 메인에서 각각 카테고리별 객체를 만들어준후, kisok 클래스 객체를 생성해서 addMenu 메소드를 통해 카테고리를 저장시킴.
- 결말: 결과적으로, 카테고리들이 메인메뉴에 출력이 잘 작동됨.
- 새롭게 알게된것 : 메소드 체이닝 ( . . . 으로 해당 객체 기준으로 . 입력시 사용할수 있는 모든 함수들이 나열되며, 연결되어 있다는 의미로 체이닝이라고 불림 )
2. 내일 학습 할 것: 알고리즘, 키오스크 과제 (필수, 5단계 (캡슐화))
반응형
'[내일배움캠프-Sparta] > Spring 6기' 카테고리의 다른 글
| TIL 17 [ 키오스크 과제 (도전🔥 1단계) + Intellij 깃 사용법 ] (0) | 2025.03.12 |
|---|---|
| TIL 16 [ 키오스크 과제 5단계 , Java (Enum, 동일성 vs 동등성) ] (0) | 2025.03.11 |
| TIL 14 [ 키오스크 과제(1~2단계) ] (0) | 2025.03.07 |
| TIL 13 [ Java(동일성 문제, 클래스와 객체, charAt함수) ] (0) | 2025.03.06 |
| TIL 12 [계산기 과제 3단계(enum, 제네릭, 람다, 스트림)] (0) | 2025.03.05 |