Developer Sang Guy

Checked Exception, Unchecked Exception 본문

Java

Checked Exception, Unchecked Exception

은크 2022. 11. 26. 20:14

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

 

위에 파란색으로 색칠 된 블록에 있는 Exception들은 아시는분들은 알겠지만 코딩을 할때 thy - catch 블록 또는 throws 예외를 적용하지 않으면 항상 컴파일 오류(빨간 줄)을 발생시키는 CheckExcpetion 클래스이다.

 

하지만 초록색으로 색칠 된 블록에 있는 Exception들은 try - catch 블록 또는 throws 예외를 적용하지 않아도 컴파일 오류를 발생시키지 않는 Unchecked Exception 클래스이다.

 

자바의 Unchecked Exception 클래스는 RuntimeException과 Error 이다.

Error 클래스는 보통 JVM이 자원 부족, 불변식 깨짐 등으로 인해 더 이상 수행을 할 수 없는 상황을 나타낼 때 사용한다.

자바 언어 명세가 요구하는 것은 아니지만 업계에 널리 퍼진 규약이니 애플리케이션 코딩 단에서 Error 클래스를 상속하여 하위 클래스를 만드는 일은 자제하는게 좋다고 한다. (이펙티브 자바 참조)

 

그래서 Checked Exception, Unchecked Exception이 뭔지는 알겠는데 어떻게 사용을 해야 적절하게 사용하는걸까?

이펙티브 자바에서는 Checked Exception, Unchecked Exception을 아래와 같이 설명을 하고있다.

 

호출하는 쪽에서 복구하리라 여겨지는 상황, 복구 가능하다고 믿는 상황이면 Checked Exception을 사용하라.

이것이 Checked Exception과 Unchecked Exception을 구분하는 기본 규칙이다.

 

Checked Exception을 사용하면 호출자가 그 예외를 catch로 잡거나 더 바깥으로 전파(throws Exception)하도록 강제하게 된다. 따라서 메소드 선언에 포함 된 검사 예외는 그 메소드를 호출하였을 때 발생할 수 있는 예외 상황을 사용자에게 알려주는 것이다.

 

Unchecked Exception은 프로그램에서 잡을 필요가 없거나 잡아봤자 뭐 할수있는게 없는 경우 사용한다.

프로그램에서 Unchecked Exception을 던졌다는 건 복구가 불가능하거나 더 실행해봤자 득보다 실이 더 많다는 뜻이다.

이런 Exception을 잡지 않은 스레드는 적절한 오류 메세지를 내뱉으며 중단된다.

 

프로그래밍 오류를 나타날때는 RuntimeException을 사용하자.

런타임 예외의 대부분은 전제조건을 만족하지 못했을 때 발생한다.

전제조건 위배란 클라이언트가 해당 API 명세에 정의된 제약을 지키지 못했다는 뜻이다.

 

 

 

 

'Java' 카테고리의 다른 글

[Java] Class에서 파일 읽어오기 (tomcat, wildfly)  (0) 2023.02.02
Socket is closed  (0) 2022.12.22
데이터 압축  (0) 2022.05.26
[Java]NonStaticInnerClass vs StaticInnerClass  (0) 2022.05.18
Java Graphql Client 구현  (0) 2022.03.30
Comments