[Java] Checked vs Unchecked Exception
1. Checked Exception (확인된 예외)
- 컴파일 타임에 반드시 처리해야 하는 예외
try-catch
또는throws
로 예외 처리를 강제함- 주로 외부 자원과 관련된 작업에서 발생 (파일, 네트워크 등)
대표적인 예
예외 클래스 | 설명 |
---|---|
| 파일, 네트워크 입출력 문제 |
| DB 관련 예외 |
| 클래스를 찾을 수 없음 |
| 스레드가 인터럽트 되었을 때 |
2. Unchecked Exception (확인되지 않은 예외)
- 런타임 중에 발생하는 예외
- 컴파일러가 예외 처리를 강제하지 않음
- 프로그래머 실수나 논리 오류로 인해 발생
대표적인 예
예외 클래스 | 설명 |
---|---|
| null 객체 접근 |
| 배열 범위 초과 접근 |
| 0으로 나누기 |
| 잘못된 형변환 |
| 문자열 → 숫자 변환 실패 |
3. 에러 (Error)
- 예외(Exception)와는 다르게 애플리케이션에서 복구할 수 없는 심각한 문제
- 주로 JVM 자체의 문제나 리소스 부족
대표적인 에러
에러 클래스 | 설명 |
---|---|
| 힙 메모리 부족 |
| 재귀 호출 무한 반복 |
| 클래스 로딩 실패 |
→ 이런 건 예외 처리보다 프로그램 구조 개선이 우선이다.
4. 한 눈에 보기
- Checked Exception은 컴파일 타임에 반드시 처리해야 하는 예외.
- Unchecked Exception은 런타임에 선택적으로 처리해도 되는 예외.
항목 | Checked Exception (확인된 예외) | Unchecked Exception (확인되지 않은 예외) |
---|---|---|
예외 처리 여부 | 반드시 | 선택적 예외 처리 가능 |
발생 시점 | 컴파일 타임 | 런타임 |
컴파일러 검사 | 예외 처리 안 하면 컴파일 에러 발생 | 예외 처리 안 해도 컴파일 됨 |
상속 계층 |
|
|
사용 예 | 파일 처리, 네트워크, DB 연결 등 외부 자원 | NPE, 배열 범위 초과, 0으로 나누기 등 프로그래밍 실수 |
예시 클래스 |
|
|
5. 예시
Checked Exception
import java.io.*;
public class CheckedExample {
public static void main(String[] args) {
try {
FileReader reader = new FileReader("file.txt"); // Checked Exception
} catch (FileNotFoundException e) {
System.out.println("파일이 없어요!");
}
}
}
FileNotFoundException
은Checked Exception
이기 때문에 반드시 예외 처리를 해야 함
Unchecked Exception
public class UncheckedExample {
public static void main(String[] args) {
String s = null;
System.out.println(s.length()); // NullPointerException (Unchecked)
}
}
NullPointerException
은RuntimeException
의 하위 클래스이기 때문에, 예외 처리를 안 해도 컴파일은 됨.- 하지만 실행 중에 터짐
출처 : chatGPT