개발 일지

[Java] Checked Exception, Unchecked Exception, Error 본문

Java

[Java] Checked Exception, Unchecked Exception, Error

junjun_ 2022. 11. 7. 18:58

중복아이디 확인 코드를 작성하다가 IllegalArgumentException 을 IllegalAccessException 로 타이핑을 하게 되었는데

IllegalAccessException 은 IllegalArgumentException과는 다르게 throws Exception을 작성하지  않으면 빨간 줄이 뜨는 것을 보고 같은 Exception인데 왜 이런 차이가 나는지 궁금해서 찾아보게 되었다.

 

궁금증은 Exception 클래스를 열어보니 어느정도 해결이 되었습니다. 아래는 Exception class 에 주석 내용입니다. 

The class Exception and any subclasses that are not also subclasses of RuntimeException are checked exceptions. Checked exceptions need to be declared in a method or constructor's  throws clause if they can be thrown by the execution of the method or constructor and propagate outside the method or constructor boundary.

RuntimeException의 하위클래스를 제외한 모든 Exception클래스는 Checked exceptions 이다. Checked exceptions은메서드 또는 생성자의 실행에 의해 throw될 수 있고 메서드 또는 생성자 경계 외부로 전파될 수 있는 경우에 메서드 또는 생성자에 throws절을 선언해야만 한다.

 

이 주석을 읽고 클래스 구조를 살펴보았습니다. 아래의 클래스 구조를 보면 IllegalArgumentException은 RuntimeException을 상속 받고, IllegalAccessException는 그렇지 않은것을 확인 할수 있습니다.

 

intellij에서 확인한 클래스 구조

결과적으로는  IllegalArgumentException은 unchecked exception인 RuntimeException 이기때문에 throw가 필요없었던 것이고,  IllegalAccessException 은 cheked exception이기때문에 throw해줄 필요가 있었던것 이였다.

 

이렇게 궁금증은 해결했지만 정리해 놓을면 좋을 것 같아서 Exception에 대해 간단히 정리해볼려고 합니다.

 


Java  클래스 구조

자바에서 에러, 예외 관련된 클래스들의 계층구조는 아래와 같습니다.  Throwable 클래스를 상속받은 Error, Exception 클래스로 나뉘어지며 Exception 클래스는  RuntimeException을 상속받은 클래스와(Unchecked Exception)과 그외의 클래스(Checked Exception)로 나뉘어집니다.

RuntimeException을 제외한 모든 Exception의 하위클래스들은 Checked Exception이다

 

오류(Error)와 예외(Exception)


오류(Error)

  • 시스템에 비정상적인 상황(시스템 자원부족)이 발생했을 경우에 에러가 발생합니다.
  • 작성, 게시, 포착 또는 회신 할 수 없기 때문에 어떤 방법으로도 복구 할 수 없습니다
  • 개발자가 예측하기도 쉽지 않고 처리할 수 있는 방법도 없습니다.
  • ex) StackOverFlow, OutOfMemory 등등

 

예외(Exception) :

  • 프로그램 실행 중에 개발자의 실수로 예기치 않은 상황이 발생했을 경우를 예외라고 합니다.
  • 예외의 대분은 프로그램의 코드로 인해 발생하며 프로그램 자체에서 예외를 처리 할 수 있습니다.
  • 예외는 Checked Exception, Unchecked Exception으로 나뉨니다
  • ex) NoSuchMethodNullPointer, IllegalArgument 등등

 

Unchecked exception과 Checked exception


Unchecked exception

  • RuntimeException의 하위클래스 들을 Unchecked Exception이라고 합니다.
  • 말 그대로 실행 중에(runtime) 발생할 수 있는 예외를 의미합니다.
  • 예외 처리를 강제하지 않습니다.

 

Cheked Exception

  • RuntimeException을 제외한 Exception의 하위클래스들을 Checked Exception이라고 합니다
  • Compile시점에 확인된니다.
  • Checked Exception을 던지고 있다면 반드시 같은 메소드에서 예외를 잡거나(trey-catch), throws 키워드를 사용하여 호출자에게 전파해야 합니다.(명시적인 예외 처리를 강제)

 

정리

  • Error은 시스템에 비정상적인 상황(시스템 자원부족)이 발생했을 경우에 발생하며 처리할 수 없습니다.
  • Exception은 개발자의 실수로 발생하는 경우가 많으며, 대부분 프로그램에서 처리가능합니다.
  • Cheked Exception은 컴파일 시점에 확인 가능하며 반드시 명시적으로 예외처리를 해줘야합니다.
  • Uncheked Exception은 런타임 중에 확인 가능하며 명시적인 예외처리를 해주지 않아도 됩니다.

 

 

Reference