[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 선언이 선택적
예외 처리의 계층 구조를 이해하고 적절한 순서로 작성하는 것이 효과적인 예외 처리의 핵심입니다.
댓글남기기