본문 바로가기

Exception

Checked Exception And UnChecked Exception

https://techblog.woowahan.com/2606/

 

응? 이게 왜 롤백되는거지? | 우아한형제들 기술블로그

{{item.name}} 이 글은 얼마 전 에러로그 하나에 대한 호기심과 의문으로 시작해서 스프링의 트랜잭션 내에서 예외가 어떻게 처리되는지를 이해하기 위해 삽질을 해본 경험을 토대로 쓰여졌습니다.

techblog.woowahan.com

해당 내용을 읽고 Checked Exception과 UnChecked Exception을 정리해보려 한다.

Checked Exception

자바의 예외는 크게 3가지 포인트로 나눌수 있습니다.

  • Checked Exception
  • UnChecked Exception
  • Error

Error

  • 에러는 시스템에 비정상적인 상황이 발생했을 경우에 발생합니다.
  • 예를들어, 메모리 부족(OutofMemoryError)이나 스택오버플로우(StackOverflowError)와 같이 복구할 수 없는 것을 말합니다.
  • 이러한 에러는 개발자가 예측하기도 쉽지 않고 처리할 수 있는 방법도 없습니다.

Exception

예외는 프로그램 실행 중에 개발자의 실수로 예기치 않은 상황이 발생했을 때 입니다. 예를들어 배열의 범위를 벗어난(ArrayIndexOutOfBoundsException), 값이 null이 참조변수를 참조(NullPointerException),
존재하지 않는 파일의 이름을 입력(FileNotFoundException) 등등이 있습니다. 이러한 것들은 그냥 보아도 프로그램에 심각한 오류여서 복구할 수 없는 수준은 아니라는 것을 알 수 있습니다.

예외에는 2가지로 나눌 수 있습니다.

  • 체크 예외(Checked Exception)
  • 언체크 예외(Unchecked Exception)

위의 자바 에러 클래스의 계층 구조를 보았을 때 RuntimeException의 하위 클래스들이 Uncheck Exception 이라 하고 RuntimeException의 하위 클래스가 아닌 Exception 클래스의 하위 클래스들을 Checked Exception이라고 합니다.

Checked Exception

체크 예외는 RuntimeException의 하위 클래스가 아니면서 Exception 클래스의 하위 클래스들입니다. 체크 예외의 특징은 반드시 에러 처리를 해야하는 특징(try/catch or throw)을 가지고 있습니다.

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

UnChecked Exception

언체크 예외는 RuntimeException의 하위 클래스들을 의미합니다. 이것은 체크 예외와는 달리 에러 처리를 강제하지 않습니다.
말 그대로 실행 중에(runtime) 발생할 수 있는 예외를 의미합니다.

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

RuntimeException은 개발자들에 의해 실수로 발생하는 것들이기 때문에 에러를 강제하지 않는 것입니다.

컴파일러가 에러처리를 확인하지 않는 RuntimeException 클래스들은 unchecked 예외라고 부르고
예외처리를 확인하는 Exception 클래스들은 checked 예외라고 부릅니다.

체크 예외와 언체크 예외의 Rollback 여부

체크 예외와 언체크 예외의 차이점 중에 같이 보아야 할 점은 Rollback의 여부입니다.

  • 체크 예외 : Rollback이 되지 않고 트랜잭션이 commit까지 완료됩니다.
  • 언체크 예외 : Rollback이 됩니다.

 

'Exception' 카테고리의 다른 글

ArrayStoreException  (0) 2022.01.27