계산기 프로젝트 트러블 슈팅 (수정완료)
계산기 프로젝트 깃 허브 주소 : https://github.com/cho-yooseok/CalcuMachineHW
소감
이번 과제는 처음 해보는 자바 프로젝트라서 많이 어려웠습니다. 단순히 코드를 작성하는 것이 아니라, 오류를 찾고 해결하는 과정이 생각보다 복잡하다는 걸 깨달았습니다. 특히, 프로그램이 멈추지 않도록 예외를 처리하는 방법이 중요하다는 걸 배웠습니다. 아직 배워야 할 것이 많지만, 더 열심히 공부해서 좋은 프로그램을 만들고 싶습니다.
1. 숫자 입력 시 오류 발생
문제 상황
사용자가 숫자가 아닌 값을 입력하면 NumberFormatException이 발생하여 프로그램이 중단될 가능성이 있음.
원인
- Double.parseDouble() 또는 Integer.parseInt()를 사용하여 숫자로 변환할 때, 숫자가 아닌 값이 입력되면 예외 발생.
해결 방법
- try-catch 블록을 사용하여 예외 발생 시 사용자에게 재입력을 요청.
import java.util.Scanner; // 사용자 입력을 받기 위해 Scanner 클래스를 가져옴
public class ExceptionExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in); // 사용자 입력을 받을 Scanner 객체 생성
try {
System.out.print("숫자를 입력하세요: "); // 사용자에게 숫자 입력 요청
String input = scanner.nextLine(); // 사용자가 입력한 값을 문자열로 받음
int number = Integer.parseInt(input); // 문자열을 정수로 변환
System.out.println("입력한 숫자: " + number); // 변환된 숫자를 출력
} catch (NumberFormatException e) { // 만약 숫자로 변환할 수 없는 값이 입력되면
System.out.println("오류: 숫자만 입력하세요!"); // 오류 메시지를 출력
}
}
}
2. 잘못된 연산자 입력 시 오류 발생
문제 상황
사칙연산 기호(+, -, *, /)가 아닌 다른 기호(&, #, @ 등)를 입력하면 IllegalArgumentException`이 발생.
원인
- OperatorType.fromSymbol() 메서드에서 허용되지 않은 연산자를 입력하면 예외가 발생하여 프로그램 중단 가능.
해결 방법
- 입력값을 사전에 검증하여 예외 발생을 방지.
import java.util.Scanner; // 사용자 입력을 받기 위해 Scanner 클래스를 가져옴
enum Operator {
ADD('+'), SUBTRACT('-'), MULTIPLY('*'), DIVIDE('/'); // 사용할 연산자 정의
private char symbol;
Operator(char symbol) { this.symbol = symbol; } // 생성자에서 연산자 저장
public static Operator fromSymbol(char symbol) {
for (Operator op : Operator.values()) { // 정의된 연산자 중 입력값과 일치하는 것이 있는지 확인
if (op.symbol == symbol) {
return op; // 맞는 연산자가 있으면 반환
}
}
throw new IllegalArgumentException("오류: 허용되지 않은 연산자입니다!"); // 잘못된 연산자가 입력되면 오류 발생
}
}
public class OperatorExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in); // 사용자 입력을 받을 Scanner 객체 생성
System.out.print("사칙연산 기호를 입력하세요 (+, -, *, /): "); // 사용자에게 연산자 입력 요청
char input = scanner.next().charAt(0); // 사용자가 입력한 연산자를 문자로 받음
try {
Operator operator = Operator.fromSymbol(input); // 입력한 연산자가 유효한지 확인
System.out.println("선택한 연산자: " + operator);
} catch (IllegalArgumentException e) {
System.out.println(e.getMessage()); // 잘못된 연산자 입력 시 오류 메시지 출력
}
}
}
3. 0으로 나눌 때 오류 발생
문제 상황
나눗셈 연산에서 두 번째 숫자로 0을 입력하면 ArithmeticException이 발생.
원인
- 수학적으로 0으로 나누는 것은 불가능하며, 프로그램에서도 이를 방지하기 위해 예외를 발생시킴.
해결 방법
- 나눗셈 연산 전 if (num2 == 0)을 추가하여 0 입력 방지.
- try-catch를 활용하여 예외 발생 시 사용자에게 올바른 입력을 요청.
if (num2 == 0) { // 만약 나누는 값이 0이라면
System.out.println("오류: 0으로 나눌 수 없습니다. 다른 숫자를 입력하세요."); // 오류 메시지 출력
} else {
double result = num1 / num2; // 정상적인 나눗셈 연산 수행
System.out.println("결과: " + result); // 결과 출력
}
4. 연산 결과 삭제 시 오류 발생
문제 상황
연산 결과 리스트에서 값을 삭제할 때, 저장된 결과가 없으면 IndexOutOfBoundsException이 발생.
원인
- 리스트가 비어 있는 상태에서 remove(0)을 호출하면 예외 발생.
해결 방법
- if (!results.isEmpty()) 검사를 수행하여 리스트가 비어 있는 경우 삭제 시도를 하지 않음.
if (!results.isEmpty()) { // 리스트가 비어 있지 않다면
results.remove(0); // 첫 번째 결과를 삭제
System.out.println("첫 번째 결과 삭제 완료!"); // 삭제 완료 메시지 출력
} else {
System.out.println("오류: 저장된 연산 결과가 없습니다!"); // 리스트가 비어 있을 경우 오류 메시지 출력
}
마무리
너무나도 어려웠습니다ㅜㅜ, 앞으로 더 열심히 공부해야겠다는 생각이 들었습니다. 그래도 이번 과제를 하나씩 진행해 나가면서 자바와 아주조금은(?) 친해진것같아 뿌듯했습니다
'트러블슈팅,기술적의사결정' 카테고리의 다른 글
| 리뷰 수정 시 존재하지 않는 리뷰인데 500에러 발생(트러블 슈팅) (1) | 2025.07.09 |
|---|---|
| 좋아요 많은 리뷰 Top 10 캐싱 처리 (Redis)를 통한 성능 개선과 부하테스트 결과 (기술적 의사 개선 트러블 슈팅) (3) | 2025.07.09 |
| 일정관리디벨롭 CalendarDevelop 프로젝트 회고와 트러블 슈팅 (0) | 2025.04.04 |
| 일정관리 앱 만들기 프로젝트 README와 트러블슈팅 (1) | 2025.03.26 |
| 키오스크화면만들기 트러블슈팅과 소감 (1) | 2025.03.14 |