[Java] Checked Exception vs Unchecked Exception 차이
1. 예외(Exception)란?
Java에서 예외(Exception)는 프로그램 실행 중에 발생할 수 있는 오류를 의미합니다.
예외 처리를 올바르게 하지 않으면 프로그램이 비정상적으로 종료될 수 있습니다.
예외는 크게 **Checked Exception**과 **Unchecked Exception** 두 가지로 나뉩니다.
2. Checked Exception vs Unchecked Exception 비교
구분 | Checked Exception | Unchecked Exception |
---|---|---|
컴파일 시점 체크 | ✔ 예외 처리를 강제함 (try-catch 또는 throws 필요) | ❌ 예외 처리가 강제되지 않음 |
발생 시점 | 외부 리소스 접근 시 (파일, 네트워크, DB 등) | 잘못된 코드 실행 시 (null 참조, 배열 범위 초과 등) |
대표 예외 | IOException, SQLException | NullPointerException, ArrayIndexOutOfBoundsException |
3. Checked Exception 예제
✅ 파일을 읽을 때 발생하는 예외 (IOException)
import java.io.*;
public class CheckedExceptionExample {
public static void main(String[] args) {
try {
FileReader file = new FileReader("nonexistent.txt");
BufferedReader reader = new BufferedReader(file);
System.out.println(reader.readLine());
reader.close();
} catch (IOException e) {
System.out.println("파일을 읽는 중 오류 발생: " + e.getMessage());
}
}
}
📌 실행 결과:
파일을 읽는 중 오류 발생: nonexistent.txt (지정된 파일을 찾을 수 없습니다)
✔ Checked Exception(예: IOException
)은 **반드시 예외 처리를 해야 합니다.**
4. Unchecked Exception 예제
✅ NullPointerException 발생 예제
public class UncheckedExceptionExample {
public static void main(String[] args) {
String text = null;
System.out.println(text.length()); // NullPointerException 발생
}
}
📌 실행 결과:
Exception in thread "main" java.lang.NullPointerException
✔ NullPointerException
은 **Unchecked Exception**으로, 컴파일 시점에서는 감지되지 않으며 실행 중 발생합니다.
5. Checked vs Unchecked 예외 처리 전략
- ✔ **Checked Exception**: 반드시 try-catch 또는 throws를 사용해 예외 처리를 해야 함
- ✔ **Unchecked Exception**: 필요하면 try-catch를 사용하지만, 보통은 코드 수정으로 해결
- ✔ 일반적으로 **비즈니스 로직에서는 Checked Exception을 사용하고, 런타임 오류는 Unchecked Exception을 사용**
🔍 결론
- ✔ **Checked Exception**: 외부 리소스 접근 시 발생하며, 예외 처리가 필수
- ✔ **Unchecked Exception**: 코드 실행 중 발생하며, 예외 처리가 강제되지 않음
- ✔ **올바른 예외 처리는 코드의 안정성을 높이는 데 필수적**
📖 다른 Java 개념도 함께 확인하세요!
'Java 오류 & 개발 > Java 기본 문법 & 오류' 카테고리의 다른 글
[Java] Checked Exception vs Unchecked Exception 차이점 (1) | 2025.03.13 |
---|---|
[Java] String vs StringBuilder vs StringBuffer 차이 (0) | 2025.03.12 |
[Java] HashMap vs Hashtable 차이점 및 활용법 (1) | 2025.03.12 |
[Java] IllegalArgumentException 발생 원인과 해결 방법 (1) | 2025.03.11 |
[Java] NullPointerException 발생 원인과 해결 방법 (0) | 2025.03.10 |