티스토리 뷰

자바의 에러와 예외의 상속 계층도는 아래와 같다.

출처 https://madplay.github.io/post/java-checked-unchecked-exceptions

위에서 보면 알 수 있듯, 실행 예외 (RuntimeException)을 제외하고는 전부 Checked Exception이라고 되어있다.

 

앞서 설명한 적이 있는데, 이는 컴파일 시점에서 확인될 수 있는 예외라는 것이다. 만약 코드를 작성하다가 Checked Exception을 발생시키면 예외를 반드시 처리해야 한다.

위 코드에서 IOException은 Checked Execption이기 때문에 컴파일 단계에서 예외 확인이 된다. 

위 코드를 컴파일 하려면 try-catch로 예외처리를 하거나 throws로 예외를 던져줘야 한다.

반면에 Runtime Exception은 unchecked Exception인 이유는 개발자가 작성한 코드가 실행될 때 발견되는 예외이기 때문이다.
(NullPointException이나 ArrayIndexOutOfBoundsException을 생각하자!)

예측할 수 없이 강제로 발생하기 때문에 컴파일하는 과정에서 예외 처리 코드가 있는지 검사하지 않고, 그렇다고 해서 메서드에 모든 runtime exception을 항상 쓰도록 강제하는 것도 말이 안되기 때문이다.
(이 문장은 제가 쓴 말이니 흘려 들으시고 밑의 oracle의 말을 봐 주세요)

...Runtime exceptions can occur anywhere in a program, and in a typical one they can be very numerous. Having to add runtime exceptions in every method declaration would reduce a program’s clarity. Thus, the compiler does not require that you catch or specify runtime exceptions (although you can).
출처 https://docs.oracle.com/javase/tutorial/essential/exceptions/runtime.html

 

댓글