Skip to main content

[Java] Checked vs Unchecked Exception


1. Checked Exception (확인된 예외)

  • 컴파일 타임에 반드시 처리해야 하는 예외
  • try-catch 또는 throws로 예외 처리를 강제함
  • 주로 외부 자원과 관련된 작업에서 발생 (파일, 네트워크 등)

대표적인 예

예외 클래스

설명

IOException

파일, 네트워크 입출력 문제

SQLException

DB 관련 예외

ClassNotFoundException

클래스를 찾을 수 없음

InterruptedException

스레드가 인터럽트 되었을 때


2. Unchecked Exception (확인되지 않은 예외)

  • 런타임 중에 발생하는 예외
  • 컴파일러가 예외 처리를 강제하지 않음
  • 프로그래머 실수나 논리 오류로 인해 발생

대표적인 예

예외 클래스

설명

NullPointerException

null 객체 접근

ArrayIndexOutOfBoundsException

배열 범위 초과 접근

ArithmeticException

0으로 나누기

ClassCastException

잘못된 형변환

NumberFormatException

문자열 → 숫자 변환 실패


3. 에러 (Error)

  • 예외(Exception)와는 다르게 애플리케이션에서 복구할 수 없는 심각한 문제
  • 주로 JVM 자체의 문제나 리소스 부족

대표적인 에러

에러 클래스

설명

OutOfMemoryError

힙 메모리 부족

StackOverflowError

재귀 호출 무한 반복

NoClassDefFoundError

클래스 로딩 실패

→ 이런 건 예외 처리보다 프로그램 구조 개선이 우선이다.


4. 한 눈에 보기

  • Checked Exception컴파일 타임에 반드시 처리해야 하는 예외.
  • Unchecked Exception런타임에 선택적으로 처리해도 되는 예외.

항목

Checked Exception (확인된 예외)

Unchecked Exception (확인되지 않은 예외)

예외 처리 여부

반드시 try-catch 또는 throws로 처리해야 함

선택적 예외 처리 가능

발생 시점

컴파일 타임

런타임

컴파일러 검사

예외 처리 안 하면 컴파일 에러 발생

예외 처리 안 해도 컴파일 됨

상속 계층

Exception 클래스 (단, RuntimeException 제외)

RuntimeException 및 그 하위 클래스

사용 예

파일 처리, 네트워크, DB 연결 등 외부 자원

NPE, 배열 범위 초과, 0으로 나누기 등 프로그래밍 실수

예시 클래스

IOException, SQLException, ParseException

NullPointerException, IndexOutOfBoundsException,

ArithmeticException


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("파일이 없어요!");
        }
    }
}
  • FileNotFoundExceptionChecked Exception이기 때문에 반드시 예외 처리를 해야 함

Unchecked Exception

public class UncheckedExample {
    public static void main(String[] args) {
        String s = null;
        System.out.println(s.length()); // NullPointerException (Unchecked)
    }
}
  • NullPointerExceptionRuntimeException의 하위 클래스이기 때문에, 예외 처리를 안 해도 컴파일은 됨.
  • 하지만 실행 중에 터짐

출처 : chatGPT