
Exception 클래스를 직접 상속받지만 RuntimeException은 상속받지 않는 예외입니다.
컴파일 시점에 처리를 강제- 컴파일러가 이 예외들을 체크하므로 "checked"라고 불립니다.
메소드에서 이러한 예외가 발생할 수 있다면, 반드시 try-catch 블록으로 처리하거나 throws 키워드로 예외를 선언해야 합니다.
주로 프로그램 외부의 요인으로 인해 발생할 수 있는 예외를 나타냅니다.
예: FileNotFoundException (파일이 존재하지 않을 때), ClassNotFoundException (클래스를 찾을 수 없을 때),
IOException, SQLException
코드 예시) FileNotFoundException
import java.io.*;
public class CheckedExceptionExample {
public static void main(String[] args) {
try {
FileInputStream file = new FileInputStream("non_existent_file.txt");
} catch (FileNotFoundException e) {
System.out.println("파일을 찾을 수 없습니다: " + e.getMessage());
}
}
}
사용자 정의 Checked Exception
RuntimeException 클래스를 상속받는 예외들
컴파일 시점에 처리를 강제하지 않음
컴파일러가 이 예외들을 체크하지 않으므로 "unchecked"라고 불립니다.
명시적인 예외 처리가 강제되지 않습니다.
주로 프로그래밍 오류로 인해 발생하는 예외를 나타냅니다.
예: ArithmeticException (0으로 나눌 때), IllegalArgumentException (메소드에 부적절한 인자를 전달할 때),
NullPointerException, ArrayIndexOutOfBoundsException
코드 예시) ArithmeticException
public class UncheckedExceptionExample {
public static void main(String[] args) {
int dividend = 10;
int divisor = 0;
try {
int result = dividend / divisor; // ArithmeticException 발생
System.out.println("결과: " + result);
} catch (ArithmeticException e) {
System.out.println("0으로 나눌 수 없습니다: " + e.getMessage());
}
}
}
Checked Exception은 컴파일 시점에 처리를 강제하지만, Unchecked Exception은 런타임에 발생하며 명시적인 처리가 강제되지 않음.
즉, 컴파일 에러가 발생하면 Checked, 아니면 Unchecked.