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
- 스프링예외처리
- 자바
- 알고리즘
- JWT
- 스프링시큐리티
- 도커
- 소셜로그인
- Intellij
- 오버라이딩
- Infra
- 프로메테우스
- css
- tomcat
- 내일배움캠프
- MySQL
- 스파르타
- 그라파나
- 스프링
- 연동
- EC2
- 키오스크
- 백준
- 인텔리제이
- AWS
- mysqlworkbench
- 테스트코드
- java
- o'auth2
- 깃허브
- 스파르타코딩클럽
Archives
- Today
- Total
개발스토리지😃
[Java] 계산기 만들기 Level1 트러블 슈팅 본문
스파르타내일배움캠프에서 계산기 만들기 도중
튜터님께 피드백을 받고 트러블슈팅을 해결한 과정을 담았다.
sparta_nbcamp/java-course/src/assignment/calculator/level1/Main.java at main · pleasebelieveme/sparta_nbcamp
Contribute to pleasebelieveme/sparta_nbcamp development by creating an account on GitHub.
github.com
1. 계산기 기능 소개
- 파일 구조
calculator/
├── ui/
│ └── Display.class
└── level1/
└── Main.class
- ui는 아래의 사이트를 참고하여 작성하였다.
https://wepplication.github.io/tools/asciiArtGen/
아스키아트 변환 사이트
텍스트 및 이미지(URL,파일첨부)를 아스키코드로 만드는 아스키아트 생성 사이트
wepplication.github.io
- 기능소개
두 숫자의 값을 입력받아 사칙연산(+, -, *, /)을 해서 출력
2. 트러블 슈팅
- while문 사용시 flag 활용
TO-BE: 아래와 같이 while은 항상 실행하도록 두었을 때 나중에 무한반복의 굴레에 갇힐 수 있다.
while (true) {
if(종료를 원한다면) {
System.exit(0);
}
}
AS-IS: flag변수를 boolean값으로 선언해주고 while의 탈출구를 만들어 준다.
// 변수 선언
boolean flag = true;
while (flag) {
if(종료를 원한다면) {
// while문을 빠져 나온 뒤;
flag = false;
continue;
}
}
// 프로그램 종료
System.exit(0);
- 입력값 검증
TO-BE: 스캐너로 정수를 입력받는데 다른 값을 넣었을때 에러가 터지로 프로그램이 종료된다.
Scanner sc = new Scanner(System.in);
// 숫자가 아닌 값이 들어왔을 때 검증이 필요
int firstNum = sc.nextInt();
AS-IS: while문과 if문과 hasNextInt()를 활용하여 검증한다.
while (flag) {
if (sc.hasNextInt()) {
firstNum = sc.nextInt();
break;
} else {
System.out.println("숫자만 입력이 가능합니다.\n");
// 잘못된 입력값 제거
sc.next();
// 다시 입력 받기
continue;
}
}
- 결과값으로 오류를 검증하려고 했을 때 문제점
TO-BE: 사칙연산한 값을 result에 담아 출력하려는데 궁금한 점이 생겼다.
int result값을 0으로 초기화했을 때 1-1연산이 들어오면 연산을 한 것인지 오류가 난 것인지 확인하기 어렵지 않을까?
AS-IS: 0으로 초기화하고 연산과정에서 검증을 거치는게 효과적이다.
// 고민 내용 1
// int로 받을 수 있는 최소값을 받고 +1을 하면 이 결과값을 연산할 사용자가 확률적으로 지극히 낮다.
// 문제점: 확률은 낮으나 비효율적
int result = Integer.MIN.VALUE+1;
// 고민 내용 2
// null로 지정
// 문제점: null을 처리해주는 코드가 필요하기 떄문에 비효율적
Integer result = null;
- 2초뒤 연산
Thread.sleep()을 써보고 싶어져서 이유없이 넣었다.
- 문제점: 계산이 오래걸리는 것이 아닌데 불필요한 쓰레드를 점유
// 2초뒤에 응답
try {
System.out.println("계산중...");
Thread.sleep(2000);
} catch (InterruptedException e) {
System.out.println("시스템 오류발생!");
throw new RuntimeException(e);
}
'알고리즘 > 자바' 카테고리의 다른 글
[Java] Collection 구조 및 메서드 (0) | 2025.03.28 |
---|---|
[알고리즘] 보드게임 유령대소동 자바코드 (0) | 2024.12.11 |
[알고리즘] 자바풀이 백준 10871번 X보다 작은 수 Scanner, StringBuilder, BufferedReader 풀이 (2) | 2024.11.28 |