throws Exception

Ajisai·2023년 7월 24일
0

Java

목록 보기
11/17

왜 바로 처리하지 않고 throw하는가?

FileInputStream에서는 FileNotFoundException도 발생할 수 있고 SecurityException도 발생할 수 있다. SecurityException은 checked exception이니까 throw하지 않는 것이 자연스럽지만, FileNotFoundException은 왜 throw하는 걸까?

  1. API가 제공하는 method는 사전에 예외가 발생할 수 있음을 선언부에 명시한다.
  2. 그리고 프로그래머가 그 예외에 대처하도록 한다.
  3. 이는 API 내부에서 예외처리를 하면 외부의 프로그래머 입장에서는 무슨 일이 일어난 건지 알 수 없기 때문이다.

내부적으로 예외를 처리해버리면 프로그래머 입장에서는 예외가 발생한 건지조차 알 수 없다. 이상하게 돌아가도 왜 그런 건지 알 수가 없다는 의미다.
따라서 예외에 대한 계획도 할 수 없다.

즉 예외를 throw하는 이유는 API를 사용하는 개발자가 상황을 인지하고 각자의 상황에 맞게 유연한 예외처리를 할 수 있도록 하기 위함이다.

클래스 상속

  • super class가 throw하는 예외의 상위 예외를 throw할 수 없다.
  • 예를 들어 Parent에서 IOExceptionthrow하는 method를 Child에서 재정의할 때 Exceptionthrow하도록 할 수 없다.

Exception chaining

  • 하위 계층에서 발생한 예외는 상위 계층에 맞게 바꿔 throw해야 한다.
  • 하위 계층에서 발생한 예외의 정보가 상위 계층의 예외 처리에 유용할 경우 이렇게 한다.
  • 하위 계층의 예외를 원인으로 해 상위 계층에서 예외를 발생시킨다.

Polymorphism

public interface InterfaceA {
    int search(int val) throws RuntimeException;
}
  • 예외 객체에도 다형성이 적용된다.
  • 즉 위 인터페이스의 search 메소드를 구현할 때 RuntimeException의 모든 하위 예외를 throw할 수 있다.
  • RuntimeException의 하위 예외기만 하면 여러 개의 예외를 throw해도 상관없다.
profile
Java를 하고 싶었지만 JavaScript를 하게 된 사람

0개의 댓글

관련 채용 정보