이번에는 자바로 간단한 계산기 프로그램을 작성하던 중 발생한 문제와 그 해결 과정을 공유하려 한다.
계산기 프로그램에서는 사용자가 입력하는 두 정수에 대한 검증이 부족한 상태였다. 예를 들어, 사용자가 num1
과 num2
에 정수가 아닌 값을 입력할 경우, 프로그램이 중단될 수 있었다. 이를 방지하기 위해 입력값에 대한 예외 처리가 필요했다.
try-catch
블록을 사용하여 InputMismatchException
을 처리하여, 사용자가 정수가 아닌 값을 입력할 경우 오류 메시지를 출력하고 다시 입력을 받도록 수정하였다.try {
// Step1 : 두 양의 정수 입력
System.out.print("첫 번째 숫자를 입력하세요: ");
int num1 = sc.nextInt();
System.out.print("두 번째 숫자를 입력하세요: ");
int num2 = sc.nextInt();
} catch (InputMismatchException e) {
System.out.println("잘못된 입력입니다. 정수를 입력해주세요.");
sc.nextLine(); // 입력 버퍼를 비우기
continue;
}
여기서 발생한 문제는 아래와 같다.
C:\Users\ADWIN\Desktop\Coding\JAVA_\Calculator\src\Calculator_Lv2\App.java:32:33
java: cannot find symbol
symbol: variable num1
location: class Calculator_Lv2.App
이 에러는 num1
변수가 try
블록 내에서 선언되어 try
블록 밖에서는 사용할 수 없기 때문에 발생한 오류이다. 자바에서 try
블록 내부에서 선언한 변수는 해당 블록을 벗어나면 접근할 수 없다. 따라서 변수를 try
블록 외부에 미리 선언한 다음, try
블록 안에서 값을 할당해야 한다.
변수를 try
블록 외부에서 선언하고, 그 안에서 값을 할당하도록 코드를 수정하였다.
public class App {
public static void main(String[] args) {
Calculator calc = new Calculator();
Scanner sc = new Scanner(System.in);
while (true) {
int num1 = 0; // try 블록 밖에서 선언
int num2 = 0;
try {
// Step1 : 두 양의 정수 입력
System.out.print("첫 번째 숫자를 입력하세요: ");
num1 = sc.nextInt(); // try 블록에서 값 할당
System.out.print("두 번째 숫자를 입력하세요: ");
num2 = sc.nextInt(); // try 블록에서 값 할당
} catch (InputMismatchException e) {
System.out.println("잘못된 입력입니다. 정수를 입력해주세요.");
sc.nextLine(); // 입력 버퍼를 비우기
continue;
}
// Step3 : 연산 수행 및 결과 출력
double result = calc.calculate(num1, num2, operator);
System.out.println("결과: " + result);
}
sc.close();
}
}
이번 트러블 슈팅은 입력 검증 부족과 변수 선언 범위 문제로 인해 발생한 에러를 해결하는 과정이었다. 이 과정에서 배운 교훈은, 자바에서는 try
블록 내에서 변수를 선언하면 해당 블록 외부에서 사용할 수 없으므로 변수를 미리 선언해야 한다는 점이다.