PHpullh
학습 라이브러리/Java/checked vs unchecked 예외

JAVA · 예외처리

checked vs unchecked 예외

checked 예외와 unchecked 예외의 차이, 설계 기준을 이해합니다.

예외처리중급checkedunchecked예외RuntimeException

핵심 설명

checked 예외와 unchecked 예외의 차이, 설계 기준을 이해합니다.

Java code

import java.io.*;

public class CheckedUnchecked {
    // Checked — 호출자가 반드시 처리해야 함
    // IOException, SQLException, ClassNotFoundException
    static String readFile(String path) throws IOException {
        // IOException은 checked -> 선언 필수
        try (var reader = new BufferedReader(new FileReader(path))) {
            return reader.readLine();
        }
    }

    // Unchecked — 처리 강제 안 됨
    // RuntimeException 하위: NullPointerException, IllegalArgumentException
    static int divide(int a, int b) {
        if (b == 0) {
            throw new IllegalArgumentException("0으로 나눌 수 없음");
        }
        return a / b;
    }

    // 설계 기준
    // Checked: 호출자가 복구할 수 있는 예외 (파일 없음 -> 대체 파일)
    // Unchecked: 프로그래밍 에러 (null 접근, 잘못된 인자)

    public static void main(String[] args) {
        // checked — 반드시 처리
        try {
            readFile("test.txt");
        } catch (FileNotFoundException e) {
            System.out.println("파일 없음: " + e.getMessage());
        } catch (IOException e) {
            System.out.println("I/O 에러: " + e.getMessage());
        }

        // unchecked — 선택적 처리
        try {
            divide(10, 0);
        } catch (IllegalArgumentException e) {
            System.out.println(e.getMessage());
        }
    }
}

학습 팁

현대 Java에서는 unchecked 예외를 선호하는 추세입니다. Spring Framework도 대부분 unchecked 예외를 사용합니다.

주의할 점

checked 예외를 무시하기 위해 빈 catch 블록을 작성하지 마세요. 최소한 로그를 남기거나 RuntimeException으로 래핑하세요.

자주 묻는 질문

checked vs unchecked 예외란 무엇인가요?

checked 예외와 unchecked 예외의 차이, 설계 기준을 이해합니다.

checked vs unchecked 예외 학습 시 주의할 점은 무엇인가요?

checked 예외를 무시하기 위해 빈 catch 블록을 작성하지 마세요. 최소한 로그를 남기거나 RuntimeException 으로 래핑하세요.