[Java 예외] 예외처리 위임 주의점

예외 처리 시 catch 블록과 throws 선언은 예외의 계층 구조를 고려하여 올바른 순서로 작성해야 합니다. 예외 처리 위임도 자식이 부모보다 큰 예외로 위임할 수 없다.



catch 블록 작성 순서

기본 원칙

  • 구체적인 예외(자식)부터 포괄적인 예외(부모) 순으로 작성
  • Exception을 먼저 사용하면 하위 catch 블록이 무시됨
try {
    // 예외 발생 가능 코드
} catch (FileNotFoundException e) {    // 더 구체적인 예외
    System.out.println("파일 없음");
} catch (IOException e) {             // 중간 범위의 예외
    System.out.println("입출력 오류");
} catch (Exception e) {               // 가장 포괄적인 예외
    System.out.println("기타 예외");
}


자식 클래스는 부모 클래스보다 더 큰 범위의 예외를 throws 할 수 없음

class Parent {
    void method() throws IOException { }
}

class Child extends Parent {
    @Override
    void method() throws FileNotFoundException { } // OK: 더 구체적인 예외
    // void method() throws Exception { }         // Error: 더 큰 범위의 예외(IOException보다 Exception이 상위 클래스)
}

💡 주의사항

  • checked exception은 반드시 throws 선언 필요
  • unchecked exception은 throws 선언이 선택적

예외 처리의 계층 구조를 이해하고 적절한 순서로 작성하는 것이 효과적인 예외 처리의 핵심입니다.

댓글남기기