[정리] CheckException과 UncheckException에 대해 알아보자!

Wook _·2023년 9월 18일
0

정리

목록 보기
12/13

CheckException! UncheckException!

자바의 예외는 크게 3가지로 나눌 수 있다.

  • 체크 예외(Check Exception)
  • 에러(Error)
  • 언체크 예외(Unchecked Exception)

지바의 에러, 예외 관련된 클래스의 계층구조는 위와 같은데, Throwable 클래스를 기준으로 Error, Exception 클래스로 나뉘어진다.

Error 클래스는 말 그대로 에러와 관련된 클래스이며,
Exception 클래스 또한 예외와 관련된 클래스이다.

자바에서는 실행 시(runtime) 발생할 수 있는 프로그램 오류를 에러(Error)와 예외(Exception) 두 가지로 구분한다.


1. Error? Exception?

에러는 시스템에 비정상적인 상황이 발생했을 경우 발생한다.

예를 들어 다음과 같이 복구할 수 없는 것을 말한다.

  • 메모리 부족(OutOfMemoryError)
  • 스택오버플로우(StackOverflowError)

이러한 에러는 개발자가 예측하기도 쉽지 않고 처리할 방법도 없다.

예외는 프로그램 실행 중에 개발자의 실수로 예기치 않은 상황이 발생했을 때이다.

예를 들어 다음과 같은 실수에서 비롯된다.

  • 배열의 범위를 벗어남(ArrayIndexOutOfBoundsException)
  • 값이 null이 참조변수를 참조(NullPointerException)

위와 같은 것은 프로그램을 복구할 수 없는 오류는 아니다.

예외는 두 가지로 나눌 수 있다.

  • 체크 예외(CheckException)
  • 언체크 예외(UncheckException)

자바 에러 클래스의 계층 구조를 보면 RuntimeException의 하위 클래스를 Uncheck Exception이라 하고, 그 외의 예외를 Checked Exception이라고 한다.


2. Checked Exception

Checked Exception은 RuntimeException의 하위 클래스가 아니면서 Exception 클래스의 하위 클래스이다.

Checked Exception의 특징은 반다시 에러 처리를 해야하는 특징(try/catch or throw)을 가지고 있다.

  • 존재하지 않는 파일의 이름을 입력(FileNotFoundException)
  • 실수로 클래스의 이름을 잘못 적음(ClassNotFoundException)

명시적인 예외 처리를 강제하기 때문에 Checked Exception이라고 한다. 반드시 try~catch로 예외를 잡거나 throw로 호출한 메소드에게 예외를 던져야 한다.


3. Unchecked Exception

Unchecked Exception은 RuntimeException의 하위 클래스를 의미한다.

Unchecked Exception은 에러 처리를 강제하지 않는다.
말 그대로 실행 중(Runtime) 발생할 수 있는 예외를 의미한다.

  • 배열의 범위를 벗어남(ArrayIndexOutOfBoundsException)
  • 값이 null이 참조변수를 참조(NullPointerException)

Uncheck Exception은 이러한 것들이 있으며, 실행 중에 발생할 만한 예외들이다.

Unchecked Exception은 에러 처리를 강제하지 않는다고 했다. 이유가 뭘까?

Unchecked Exception은 개발자의 실수에서 발생한다.
만약 Unchecked Exception이 예외 처리를 강제한다면 우리의 코드는 예외 처리 코드로 범벅이 될 것이다.


4. 정리!

Checked Exception이 Rollback 되지 않는 이유는, Checked Exception은 기본적으로 복구가 가능하다는 메커니즘을 가지고 있어 복구가 가능하니 Rollback이 진행되지 않기 때문이다.


5. 예외 처리를 하는 방법

예외 복구

예외 상활을 파악하고 문재룰 해결하여 정상 상태로 돌려 놓는 방법이다.

대부분의 상황에서 예외를 복구할 수 있는 경우는 거의 없기 때문에 자주 사용되지 않는다.

예외 처리 회피

예외 처리를 직접 담당하지 않고 호출한 쪽으로 던져 회피하는 방법이다. 긴밀하게 역할을 분담하고 있는 관계가 아닐 경우 예외를 던지는 무책임한 방법이다.

예외 전환

예외 처리 회피와 비슷하게 메소드 밖으로 예외를 던지지만, 그냥 던지지 않고 적절한 예외로 전환해서 넘기는 방법읻. 명확한 의미로 전달되기 위해 접한한 의미를 가진 예외로 변경해야 한다.


예외 복구 전략이 명확하고 복구가 가능하면 Checked Exception을 try-catch로 잡아서 예외 복구를 하거나 코드의 흐름으로 제어하는 것이 좋지만,

이런 경우는 흔하지 않기 때문에 Checked Exception이 발생하면 더 구체적인 Unchecked Exception을 발생시키고 예외에 대한 메세지를 명확하게 전달하는 것이 효과적이다.

끝!


출처

https://devlog-wjdrbs96.tistory.com/351
https://steady-coding.tistory.com/583

profile
책상 위에 있는 춘식이 피규어가 귀엽다.

0개의 댓글