Java에서는 예외(Exception)를 두 가지 유형으로 구분합니다.
이는 예외 처리의 강제성과 관련이 있습니다.
정의:
컴파일 타임(Compile-time)에 반드시 처리해야 하는 예외.
try-catch
블록으로 처리하거나, 메서드 선언에 throws
키워드를 사용여 호출자에게 예외를 위임해야 컴파일 오류가 발생하지 않습니다.특징:
대표적인 예:
IOException
: 파일 입출력 시 발생.SQLException
: 데이터베이스 작업 시 발생.ClassNotFoundException
: 클래스 로딩 실패 시 발생.예제 코드:
import java.io.*;
public class CheckedExample {
public static void main(String[] args) {
try {
FileReader reader = new FileReader("example.txt"); // Checked Exception 발생 가능
} catch (FileNotFoundException e) {
System.out.println("파일이 존재하지 않습니다.");
}
}
}
정의:
런타임(Runtime)에 발생하며, 컴파일러가 예외 처리를 강제하지 않는 예외.
일반적으로 프로그래머의 실수나 코드 오류로 인해 발생.
특징:
try-catch
또는 throws
)가 선택 사항.대표적인 예:
NullPointerException
: 참조가 없는 객체를 사용하려고 할 때 발생.ArrayIndexOutOfBoundsException
: 배열 인덱스가 범위를 벗어날 때 발생.ArithmeticException
: 0으로 나누기 등 산술 오류 시 발생.IllegalArgumentException
: 메서드에 잘못된 인자를 전달할 때 발생.예제 코드:
public class UncheckedExample {
public static void main(String[] args) {
int[] numbers = {1, 2, 3};
System.out.println(numbers[5]); // ArrayIndexOutOfBoundsException 발생
}
}
특징 | Checked Exception | Unchecked Exception |
---|---|---|
발생 시점 | 컴파일 타임 | 런타임 |
처리 강제 여부 | 처리 강제 (try-catch or throws ) | 처리 선택 |
발생 원인 | 외부 환경 문제 | 프로그래머의 실수나 논리 오류 |
대표적인 예 | IOException , SQLException | NullPointerException , ArithmeticException |
Checked Exception을 처리하기 복잡한 경우, Unchecked Exception으로 변환하여 전파할 수 있습니다.
예제:
public class ExceptionConverter {
public static void main(String[] args) {
try {
throwCheckedException();
} catch (Exception e) {
throw new RuntimeException(e); // Checked -> Unchecked로 변환
}
}
public static void throwCheckedException() throws Exception {
throw new Exception("Checked Exception 발생");
}
}
Checked Exception:
Unchecked Exception:
null
체크 없이 객체를 사용한 경우.Exception
클래스를 직접 상속.RuntimeException
클래스를 상속.java.lang.Object
↳ java.lang.Throwable
↳ java.lang.Exception (Checked Exception)
↳ java.lang.RuntimeException (Unchecked Exception)
Error는 주로 JVM에서 발생하는 심각한 문제로, OutOfMemoryError, StackOverflowError 등 시스템 레벨에서 발생하는 오류입니다. 이는 일반적으로 프로그램에서 처리하지 않으며, 회복이 어려운 오류에 속하며, 애플리케이션 코드에서 복구할 수 없는 심각한 문제를 나타냅니다.
반면, Exception은 프로그램 실행 중 발생할 수 있는 오류 상황을 나타냅니다. 대부분의 경우 회복 가능성이 있으며, 프로그램 내에서 예외 처리를 통해 오류 상황을 제어할 수 있습니다. Exception은 다시 Checked Exception과 Unchecked Exception으로 나눌 수 있습니다.
추가 학습 자료