본문 바로가기

Java 오류 & 개발/Java 기본 문법 & 오류

[Java] Checked Exception vs Unchecked Exception 차이

[Java] Checked Exception vs Unchecked Exception 차이

1. 예외(Exception)란?

Java에서 예외(Exception)는 프로그램 실행 중에 발생할 수 있는 오류를 의미합니다.

예외 처리를 올바르게 하지 않으면 프로그램이 비정상적으로 종료될 수 있습니다.

예외는 크게 **Checked Exception**과 **Unchecked Exception** 두 가지로 나뉩니다.


2. Checked Exception vs Unchecked Exception 비교

구분Checked ExceptionUnchecked Exception
컴파일 시점 체크✔ 예외 처리를 강제함 (try-catch 또는 throws 필요)❌ 예외 처리가 강제되지 않음
발생 시점외부 리소스 접근 시 (파일, 네트워크, DB 등)잘못된 코드 실행 시 (null 참조, 배열 범위 초과 등)
대표 예외IOException, SQLExceptionNullPointerException, 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 예외 처리 가이드 보러 가기