[Java 개념] Java에서의 예외

예세림·2024년 9월 15일

Java

목록 보기
12/12

1. Checked Exception

Exception 클래스를 직접 상속받지만 RuntimeException은 상속받지 않는 예외입니다.

컴파일 시점에 처리를 강제- 컴파일러가 이 예외들을 체크하므로 "checked"라고 불립니다.
메소드에서 이러한 예외가 발생할 수 있다면, 반드시 try-catch 블록으로 처리하거나 throws 키워드로 예외를 선언해야 합니다.
주로 프로그램 외부의 요인으로 인해 발생할 수 있는 예외를 나타냅니다.
예: FileNotFoundException (파일이 존재하지 않을 때), ClassNotFoundException (클래스를 찾을 수 없을 때),
IOException, SQLException

코드 예시) FileNotFoundException

import java.io.*;

public class CheckedExceptionExample {
    public static void main(String[] args) {
        try {
            FileInputStream file = new FileInputStream("non_existent_file.txt");
        } catch (FileNotFoundException e) {
            System.out.println("파일을 찾을 수 없습니다: " + e.getMessage());
        }
    }
}

사용자 정의 Checked Exception

2. Unchecked Exception

RuntimeException 클래스를 상속받는 예외들
컴파일 시점에 처리를 강제하지 않음

컴파일러가 이 예외들을 체크하지 않으므로 "unchecked"라고 불립니다.
명시적인 예외 처리가 강제되지 않습니다.
주로 프로그래밍 오류로 인해 발생하는 예외를 나타냅니다.

예: ArithmeticException (0으로 나눌 때), IllegalArgumentException (메소드에 부적절한 인자를 전달할 때),
NullPointerException, ArrayIndexOutOfBoundsException

코드 예시) ArithmeticException

public class UncheckedExceptionExample {
    public static void main(String[] args) {
        int dividend = 10;
        int divisor = 0;
        
        try {
            int result = dividend / divisor; // ArithmeticException 발생
            System.out.println("결과: " + result);
        } catch (ArithmeticException e) {
            System.out.println("0으로 나눌 수 없습니다: " + e.getMessage());
        }
    }
}

요약

Checked Exception은 컴파일 시점에 처리를 강제하지만, Unchecked Exception은 런타임에 발생하며 명시적인 처리가 강제되지 않음.

즉, 컴파일 에러가 발생하면 Checked, 아니면 Unchecked.

0개의 댓글