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
- 스프링
- tomcat
- 도커
- AWS
- 프로메테우스
- 연동
- 내일배움캠프
- o'auth2
- 테스트코드
- 스프링시큐리티
- 스파르타코딩클럽
- 그라파나
- 인텔리제이
- mysqlworkbench
- 스프링예외처리
- EC2
- 알고리즘
- JWT
- java
- Intellij
- 오버라이딩
- 백준
- 소셜로그인
- 잔디심기챌린지
- css
- 자바
- 키오스크
- Infra
- 스파르타
- 깃허브
Archives
- Today
- Total
개발스토리지😃
[Java] 키오스크 만들기 Level1 트러블 슈팅 본문
스파르타내일배움캠프에서 키오스크 만들기 Level1의 개발 과정을 담았다.
이전 계산기를 만들때 요구사항을 주의깊게 듣지 않아 완성도를 떠나 동떨어진 결과가 나왔다.
그래서 이번 과정에서는 요구사항에 시간을 더 투자할 것이다.
시스템 환경
IDE : Intelli J
language : Java 17
https://github.com/pleasebelieveme/sparta_nbcamp/tree/main/java-course/src/assignment/kiosk/level1
sparta_nbcamp/java-course/src/assignment/kiosk/level1 at main · pleasebelieveme/sparta_nbcamp
Contribute to pleasebelieveme/sparta_nbcamp development by creating an account on GitHub.
github.com
1. 요구사항
1. 실행시 햄버거 메뉴 출력 및 선택하기
2. Main클래스 하나에 모두 실행하기
2. Main
- 길지 않기에 코드를 모두 담았다.
package assignment.kiosk.level1;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
boolean flag = true;
while (flag) {
System.out.println("\uD83E\uDD17 키오스크를 시작합니다. \uD83E\uDD17");
System.out.println("1. ShackBurger | W 6.9 | 토마토, 양상추, 쉑소스가 토핑된 치즈버거\n"
+ "2. SmokeShack | W 8.9 | 베이컨, 체리 페퍼에 쉑소스가 토핑된 치즈버거\n"
+ "3. Cheeseburger | W 6.9 | 포테이토 번과 비프패티, 치즈가 토핑된 치즈버거\n"
+ "4. Hamburger | W 5.4 | 비프패티를 기반으로 야채가 들어간 기본버거\n"
+ "0. 종료");
if (!sc.hasNextInt()) {
System.out.println("잘못된 입력입니다. 숫자를 입력해주세요.\n");
sc.next();
continue;
}
// 사용자 입력
int choice = sc.nextInt();
// 메뉴 번호 범위 체크
if (choice < 0 || choice > 4) {
System.out.println("메뉴에 나와있는 번호를 입력해주세요.\n");
continue;
}
// 메뉴 선택 처리
switch (choice) {
case 1:
System.out.println("ShackBurger를 선택하셨습니다.\n");
break;
case 2:
System.out.println("SmokeShack를 선택하셨습니다.\n");
break;
case 3:
System.out.println("Cheeseburger를 선택하셨습니다.\n");
break;
case 4:
System.out.println("Hamburger를 선택하셨습니다.\n");
break;
case 0:
flag = false;
System.out.println("프로그램을 종료합니다.");
break;
} // switch
} // while
sc.close();
}
}
3. 트러블 슈팅
- scanner.hasNextInt()
hasNestInt()함수를 사용할 때 항상 개행문자가 남아있었다.
아래 처럼 먼저 숫자를 입력 받고 hasNestInt()로 검증을 하였기 때문에 발생하는 문제였다.
int choice = sc.nextInt(); if (!sc.hasNextInt()) { System.out.println("잘못된 입력입니다. 숫자를 입력해주세요.\n"); sc.next(); continue; }
만약에
1. 사용자가 3을 입력하면, sc.hasNextInt()는 true를 반환하고
2. if (!sc.hasNextInt()) 조건을 통과한 후
3. int choice = sc.nextInt();가 실행되어 choice에 3이 저장된다.
그래서 아래와 같이 수정되었다.if (!sc.hasNextInt()) { System.out.println("잘못된 입력입니다. 숫자를 입력해주세요.\n"); sc.next(); continue; } int choice = sc.nextInt();
- System.exit(0)
즉시 종료를 나타내는 System.exit(0)를 항상 사용하였는데 챗 GPT에게 물어볼때마다 빠져있어서 찾아보았다.
아래 코드는 내가 자주 사용하던 예시이다.
// 사용자가 0을 입력하면 종료 switch (choice) { ... case 0: System.out.println("프로그램을 종료합니다."); System.exit(0); }
문제점
1. 자원 해제
프로그램 종료 시에 자원을 적절히 해제하지 않고 종료될 수 있다. 이번에 사용한 것은 Scanner인데 메모리 누수 등의 문제가 발생할 수 있다.
2. 후속 작업 실행없이 즉시 종료
System.exit(0)을 호출하면, 그 이후에 작성된 코드들이 실행되지 않는다. 메시지를 출력하는 코드가 뒤에 있다면 출력되지 않으 며 finally 블록 또한 실행되지 않는다.
그래서 System.exit(0)는 사용하지 않고 정상 종료할 수 있도록 코드를 수정하였다.
꼭 필요한 경우는 이번 과정에서 발생하지 않을 듯 싶다.
'언어 > 자바' 카테고리의 다른 글
[Java] 키오스크 만들기 Level3 트러블 슈팅 (0) | 2025.03.10 |
---|---|
[Java] 키오스크 만들기 Level2 트러블 슈팅 (1) | 2025.03.10 |
[Java] 계산기 만들기 Level2 트러블 슈팅 (0) | 2025.03.05 |
[Java] 자바의 객제치향 4가지 특징 4. 다형성 (1) | 2025.03.05 |
[Java] 자바의 객제치향 4가지 특징 3. 추상화 (0) | 2025.03.04 |