Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- java
- o'auth2
- tomcat
- 키오스크
- 스파르타
- 스파르타코딩클럽
- Intellij
- 테스트코드
- 내일배움캠프
- mysqlworkbench
- MySQL
- 자바
- 스프링예외처리
- 도커
- 프로메테우스
- JWT
- Infra
- css
- 알고리즘
- 스프링
- 연동
- 백준
- 인텔리제이
- 오버라이딩
- 소셜로그인
- 그라파나
- EC2
- 깃허브
- 스프링시큐리티
- AWS
Archives
- Today
- Total
개발스토리지😃
[Java] 키오스크 만들기 Level4 트러블 슈팅 본문
스파르타내일배움캠프에서 키오스크 만들기 Level4의 개발 과정을 담았다.
이전 계산기를 만들때 요구사항을 주의깊게 듣지 않아 완성도를 떠나 동떨어진 결과가 나왔다.
그래서 이번 과정에서는 요구사항에 시간을 더 투자할 것이다.
시스템 환경
IDE : Intelli J
language : Java 17
https://github.com/pleasebelieveme/sparta_nbcamp/tree/main/java-course/src/assignment/kiosk/level4
sparta_nbcamp/java-course/src/assignment/kiosk/level3 at main · pleasebelieveme/sparta_nbcamp
Contribute to pleasebelieveme/sparta_nbcamp development by creating an account on GitHub.
github.com
1. 요구사항
1. Menu클래스 생성하기
2. List<MenuItem>를 Menu클래스가 관리하도록 변경 (Kiosk -> Menu)
- 클래스 역할 정의
클래스 | 역할 |
Main | Kiosk 시작, Menu |
Kiosk | 키오스크 프로그램의 메뉴를 관리하고 사용자 입력을 처리하는 클래스 |
Menu | MenuItem 클래스를 관리하는 클래스 |
MenuItem | 개별 음식 항목을 관리하는 클래스(이름, 가격, 설명) |
2. Menu클래스 생성
- 카테고리 필드를 추가
- Menu객체를 생성할 때 MenuItem 기본값 초기화
public class Menu {
private String category;
private List<MenuItem> menuItems;
Menu(String category) {
this.category = category;
this.menuItems = initializeMenu(category);
}
// getter
// setter
// 메뉴아이템 값 주입 함수
private List<MenuItem> initializeMenu(String category) {
// List를 리턴하는 함수
List<MenuItem> menuItems = new ArrayList<>();
if (category.equals("burger")) {
menuItems.add(new MenuItem("ShackBurger", 6.9, "토마토, 양상추, 쉑소스가 토핑된 치즈버거"));
...
} else if (category.equals("drink")) {
menuItems.add(new MenuItem("Coke", 2.5, "탄산이 들어간 청량한 음료"));
...
} else if (category.equals("dessert")) {
menuItems.add(new MenuItem("Ice Cream", 4.0, "부드럽고 달콤한 바닐라 아이스크림"));
...
}
return menuItems;
}
}
3. Kiosk클래스 Level3에서 수정된 내용
- Kiosk객체를 생성할 때 Menu객체 기본값 초기화
Kiosk() {
this.menus = new ArrayList<>();
menus.add(new Menu("burger"));
...
}
- 카테고리 선택 로직 추가
- 카테고리 선택 if문 안에 메뉴아이템 선택 로직 작성
// 카테고리 선택 처리
if (categoryChoice >= 1 && categoryChoice <= menus.size()) {
// 메뉴출력
int idx = 1;
for (MenuItem m : menus.get(categoryChoice-1).getMenuItems()) {
System.out.println(idx++ + ". " + m.getName() + " | W " + m.getPrice() + " | " + m.getDetails());
}
System.out.println("0. 뒤로가기\n");
// 사용자 입력 숫자 검증
if (!sc.hasNextInt()) { ... }
// 사용자 입력 저장
int itemChoice = sc.nextInt();
// 메뉴 번호 범위 체크
if (itemChoice < 0 || itemChoice > menus.get(categoryChoice-1).getMenuItems().size()) {
System.out.println("메뉴에 나와있는 번호를 입력해주세요.\n");
continue;
}
// 메뉴 선택 처리
if (itemChoice >= 1 && itemChoice <= menus.get(categoryChoice-1).getMenuItems().size()) {
System.out.println("선택한 메뉴: " + menus.get(categoryChoice-1).getMenuItems().get(itemChoice-1).getName() +
", 가격: " + menus.get(categoryChoice-1).getMenuItems().get(itemChoice-1).getPrice() +
", 설명: " + menus.get(categoryChoice-1).getMenuItems().get(itemChoice-1).getDetails() + "\n");
} else if (itemChoice == 0) {
continue;
}
} else if (categoryChoice == 0) {
flag = false;
System.out.println("프로그램을 종료합니다.");
}
} // while
4. 트러블 슈팅
- switch문을 if문으로 변경
- TO-BE: level3에서 switch문을 아래와 같이 리팩토링을 하였다.
switch (choice) { case 1, 2, 3, 4 -> System.out.println("선택한 메뉴: " + menuItems.get(choice-1).getName() + ", 가격: " + menuItems.get(choice-1).getPrice() + ", 설명: " + menuItems.get(choice-1).getDetails()+ "\n"); case 0 -> { flag = false; System.out.println("프로그램을 종료합니다."); } } // switch
- 문제점은 메뉴가 추가 될때마다 switch문을 고쳐야 하기에 코드를 바꾸지 않고 메뉴를 추가하는 방법을 고안했다.
- AS-IS:
- 코드는 더 길어졌지만 size()로 범위를 지정함으로써 해결하였다.
if (itemChoice >= 1 && itemChoice <= menus.get(categoryChoice-1).getMenuItems().size()) { System.out.println("선택한 메뉴: " + menus.get(categoryChoice-1).getMenuItems().get(itemChoice-1).getName() + ", 가격: " + menus.get(categoryChoice-1).getMenuItems().get(itemChoice-1).getPrice() + ", 설명: " + menus.get(categoryChoice-1).getMenuItems().get(itemChoice-1).getDetails() + "\n"); } else if (itemChoice == 0) { continue; }
'언어 > 자바' 카테고리의 다른 글
[Java] 키오스크 만들기 도전과제1 트러블 슈팅 (0) | 2025.03.14 |
---|---|
[Java] 키오스크 만들기 Level5 트러블 슈팅 (0) | 2025.03.12 |
[Java] 키오스크 만들기 Level3 트러블 슈팅 (0) | 2025.03.10 |
[Java] 키오스크 만들기 Level2 트러블 슈팅 (1) | 2025.03.10 |
[Java] 키오스크 만들기 Level1 트러블 슈팅 (0) | 2025.03.07 |