CheckedException, UncheckedException
자바에서 예외 처리는 프로그램의 실행 중 발생할 수 있는 예외 상황을 적절하게 처리하기 위해 중요한 역할을 한다.
자바에서는 예외를 크게 두가지로 Checked, Unchecked로 나뉜다.
두 가지 예외는 발생 여부와 처리방법에 따라 다르다. 각각의 예외가 언제 발생하며 어떻게 처리하는지 알아보자.
Checked Exception (검사된 예외)
CheckedException은 컴파일 시점에서 발생할 수 있는 예외이다. 즉, 자바 컴파일러가 코드에서 발생할 가능성이 있는 예외를 체크하고, 개발자가 예외를 처리하도록 강제한다. 만약 CheckedException이 발생할 가능성이 있는 코드에서 이를 처리하지 않으면, 컴파일 에러가 발생하여 프로그램을 실행할 수 없다.
import java.io.*;
public class CheckedExceptionExample {
public static void main(String[] args) {
try {
FileReader file = new FileReader("somefile.txt");
BufferedReader fileInput = new BufferedReader(file);
System.out.println(fileInput.readLine());
} catch (IOException e) {
System.out.println("파일을 읽는 도중 오류가 발생했습니다.");
}
}
}
FileReader와 BufferedReader를 사용하여 파일을 읽는 과정에서 IOException이라는 CheckedException이 발생할 수 있다. 이 예외는 컴파일 시점에서 체크되므로, 반드시 try-catch 블록으로처리하거나 throws를 통해 메소드 시그니처에 예외를 선언해야 한다.
Unchecked Exception (검사되지 않은 예외)
UncheckedException은 컴파일 시점에 체크되지 않는 예외로, 프로그램 실행 중에 발생할 수 있다. 이 예뇌는 RuntimeException을 상속받은 클래스들로 구성된다. UncheckedException은 개발자가 반드시 처리할 필요가 없고, 예외를 처리하지 않아도 컴파일 오류가 발생하지 않는다.
public class UncheckedExceptionExample {
public static void main(String[] args) {
int[] arr = {1, 2, 3};
System.out.println(arr[5]); // ArrayIndexOutOfBoundsException 발생
}
}
배열의 인덱스에 벗어난 arr[5]에 접근하고 있다. 이로인해 ArrayIndexOutOfBoundsException이 발생하는데, 이 예외는 UncheckedException에 속한다. 이는 런타임중에 발생하므로 반드시 예외를 처리해야 하는 의무는 없다.
언제 CheckedException을 사용하고, 언제 UncheckedException을 사용해야 할까?
- CheckedException은 외부 시스템(파일, 네트워크, 데이터베이스 등)과 관련된 예외에 사용합니다. 이런 예외들은 일반적으로 프로그램의 실행에 영향을 미칠 수 있으므로, 예외 처리를 강제하여 안정성을 확보하는 것이 좋습니다.
- UncheckedException은 프로그래밍 오류를 나타내는 경우에 사용합니다. 예를 들어, 배열의 인덱스를 잘못 접근하거나, 널 객체를 참조하는 등의 실수로 발생하는 예외입니다. 이런 예외는 개발자가 코드 작성 시 주의해야 할 사항이며, 예외 처리를 강제할 필요는 없습니다.