CheckedException, UncheckedException

과녁스·2024년 10월 16일
0

Java

목록 보기
10/11

Java에서 예외는 크게 두 가지 종류로 나뉩니다. CheckedException과 UncheckedException. 이 두 예외는 예외 발생 시 처리해야 할 방식에 따라 구분됩니다.

CheckedException

CheckedException은 컴파일 시점에 예외 처리를 강제하는 예외입니다. 즉, 이러한 예외가 발생할 가능성이 있는 메소드를 호출할 때는 반드시 예외 처리를 해야 합니다. 그렇지 않으면 컴파일 오류가 발생합니다.

특징:

  • 컴파일러가 예외 처리 여부를 확인하기 때문에, 반드시 예외를 처리해야 합니다.
  • try-catch 블록을 사용하여 예외를 처리하거나, 메소드 시그니처에 throws 키워드를 사용하여 예외를 던질 수 있습니다.
  • CheckedException은 보통 프로그램의 외부 환경 문제(파일 입출력, 네트워크 오류 등)에서 발생합니다.

예시:

  • IOException (입출력 관련 작업 중 발생)
  • SQLException (데이터베이스 관련 작업 중 발생)
  • ClassNotFoundException (클래스를 찾지 못할 때 발생)
public void readFile(String fileName) {
    try {
        FileReader file = new FileReader(fileName);  // FileNotFoundException이 발생할 수 있음
        BufferedReader fileInput = new BufferedReader(file);
        
        // 파일에서 데이터 읽기
        fileInput.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();  // 예외 처리
    } catch (IOException e) {
        e.printStackTrace();  // 예외 처리
    }
}

위의 예제에서 FileNotFoundException과 IOException은 CheckedException입니다. 파일 작업 중 발생할 수 있는 오류이므로, 반드시 예외 처리를 해야 합니다.

UncheckedException (RuntimeException)

UncheckedException은 컴파일러가 예외 처리를 강제하지 않는 예외입니다. 즉, 이러한 예외는 컴파일 시점에서 체크되지 않으며, 런타임 시점에서 발생합니다. 예외 처리(try-catch)가 선택 사항이며, 예외가 발생하더라도 해당 예외를 처리하지 않아도 컴파일 오류가 발생하지 않습니다.

특징:

  • 컴파일 시점에서 예외 처리를 강제하지 않기 때문에, 개발자가 선택적으로 처리할 수 있습니다.
  • 주로 개발자의 실수 또는 논리적인 오류로 인해 발생합니다.
  • RuntimeException을 상속받는 예외들이 UncheckedException에 해당합니다.

예시:

  • NullPointerException (객체가 null인 상태에서 메소드를 호출할 때 발생)
  • ArrayIndexOutOfBoundsException (배열의 인덱스가 범위를 벗어났을 때 발생)
  • ArithmeticException (숫자 연산 중 예외가 발생할 때, 예: 0으로 나누기)
public void divide(int a, int b) {
    int result = a / b;  // b가 0일 경우 ArithmeticException 발생
}

public void accessArray(int[] arr, int index) {
    int value = arr[index];  // index가 배열의 크기를 벗어나면 ArrayIndexOutOfBoundsException 발생
}

위의 예제에서 ArithmeticException과 ArrayIndexOutOfBoundsException은 UncheckedException입니다. 런타임에 발생할 수 있으며, 예외를 처리하지 않아도 컴파일 오류는 발생하지 않습니다.

CheckedException VS UncheckedException

비교 항목CheckedExceptionUncheckedException (RuntimeException)
처리 시점컴파일 시점에 처리 강제런타임 시점에 발생하며 처리 선택적
예외 처리 강제 여부반드시 try-catchthrows로 처리해야 함예외 처리 선택적, 처리하지 않아도 컴파일됨
상속Exception 클래스에서 파생RuntimeException 클래스에서 파생
주로 발생하는 상황외부 환경에 의한 오류 (파일, 네트워크, DB 등)개발자의 실수나 논리적 오류 (잘못된 연산 등)
예시IOException, SQLExceptionNullPointerException, ArrayIndexOutOfBoundsException, ArithmeticException

예외 처리 전략

  • CheckedException은 반드시 예외 처리를 강제하기 때문에, 파일이나 데이터베이스 작업처럼 외부 리소스에 접근하는 코드를 작성할 때는 적절한 예외 처리가 필요합니다.
  • UncheckedException은 런타임 오류이므로, 코드의 논리적 오류를 줄이고 프로그램의 안정성을 높이기 위해 미리 방지하는 코딩 습관을 기르는 것이 중요합니다. UncheckedException에 대해서는 예외 처리를 생략할 수 있지만, 특정 상황에서는 적절한 처리를 통해 안정성을 높이는 것이 좋습니다.
profile
ㅎㅅㅎ

0개의 댓글