자바에서 예외(Exception)는 크게 Checked Exception과 Unchecked Exception으로 나뉩니다.

1. Checked Exception

개념

- 컴파일 시점에 반드시 예외 처리를 해야 하는 예외
- try-catch 문으로 처리하거나 throws 키워드를 사용하여 호출자에게 예외 처리를 위임해야 함
- 예외 처리를 하지 않으면 컴파일 오류 발생

 

대표적인 Checked Exception

- IOException → 파일 입출력 시 발생
- SQLException → 데이터베이스 관련 예외
- ClassNotFoundException → 클래스 로드 실패
- InterruptedException → 스레드 인터럽트 발생

 

예제

import java.io.File;
import java.io.FileReader;
import java.io.IOException;

public class CheckedExceptionExample {
    public static void main(String[] args) {
        try {
            File file = new File("test.txt");
            FileReader fr = new FileReader(file); // FileNotFoundException 발생 가능
        } catch (IOException e) { // IOException을 반드시 처리해야 함
            System.out.println("파일을 찾을 수 없습니다: " + e.getMessage());
        }
    }
}

 


2. Unchecked Exception

개념

- 런타임(Runtime)에서 발생하는 예외
- 컴파일 시점에서는 예외 처리를 강제하지 않음
- 대부분 프로그래머의 실수로 인해 발생

 

대표적인 Unchecked Exception

- NullPointerException → null 객체에 접근
- ArrayIndexOutOfBoundsException → 배열의 인덱스를 초과
- ArithmeticException → 0으로 나누기
- ClassCastException → 잘못된 형 변환

 

예제

public class UncheckedExceptionExample {
    public static void main(String[] args) {
        String text = null;
        System.out.println(text.length()); // NullPointerException 발생
    }
}

 


3. Checked vs Unchecked 차이점 비교

 

구분 Checked Exception Unchecked Exception
예외 처리 여부 반드시 처리해야 함 (try-catch 또는 throws) 강제되지 않음 (개발자가 직접 처리 가능)
컴파일 단계 예외 처리를 하지 않으면 컴파일 오류 발생 컴파일 단계에서 예외 검사 없음
발생 시점 파일 I/O, 네트워크, DB 작업 등 외부 시스템과 연관된 예외 null, 배열 범위 초과, 0 나누기 등 코드 문제로 발생
예제 IOException, SQLException, ClassNotFoundException NullPointerException, ArrayIndexOutOfBoundsException, ArithmeticException

 


4. 언제 Checked vs Unchecked를 사용해야 할까?

1) Checked Exception을 사용할 때

- 외부 시스템(파일, DB, 네트워크 등)과 관련된 오류를 예상할 수 있는 경우
- 개발자가 반드시 예외 처리를 강제해야 하는 경우

 

2) Unchecked Exception을 사용할 때

- 프로그래머의 실수로 인해 발생할 가능성이 높은 경우
- NullPointerException, IndexOutOfBoundsException 등 논리적인 오류가 주된 원인인 경우

 


5. 요약

- Checked Exception → 개발자가 반드시 처리해야 하는 예외, 컴파일 할 때 예외에 대한 처리를 강제.
- Unchecked Exception → 프로그램 로직 오류로 발생하는 예외, 강제 예외 처리는 필요 없음, 예외에 대한 처리를 강제하지 않음.

 

Checked Exception은 외부 시스템과의 통신 오류, Unchecked Exception은 개발자가 잘못된 코드를 작성했을 때 발생한다고 기억하면 됩니다!

'BackEnd > JAVA' 카테고리의 다른 글

[JAVA] 정규식 사용 정리  (0) 2025.02.20
[JAVA] Stream API Collect 메소드  (0) 2025.02.20
[JAVA] Stream API 생성과 사용법 정리  (2) 2025.02.15

+ Recent posts