☕️ java

CheckedException 과 UncheckedException

beomsic 2022. 10. 10. 14:57

에러(Error) 와 예외(Exception)


에러(Error)는 시스템에 비정상적인 상황이 발생한 경우를 말한다.

  • 시스템이 종료되어야 할 수준의 상황
  • 애플리케이션 코드에서 잡을 수 없다.

개발자가 미리 예측하여 방지할 수 없다.

ex) OutOfMemoryError, ThreadDeath, StackOverflowError 등

예외(Exception)은 개발자가 구현한 로직에서 발생한 실수 또는 사용자의 영향에 의해 발생한다.

  • 개발자가 **미리 예측하여 방지할 수 있기에 상황에 맞는 예외처리(Exception Handle)**를 해야한다.
  • Checked ExceptionUnchecked Exception으로 구분할 수 있다.

✔️ Checked Exception


RuntimeException을 상속하지 않은 예외 클래스

복구 가능성이 있는 예외로 반드시 예외를 처리하는 코드를 함께 작성해야 한다.

예외를 처리하지 않으면 컴파일 에러가 발생한다.

특징

  • 명시적인 예외처리를 강제한다
  • 반드시 try-catch로 예외를 잡거나, throw로 호출한 메소드에게 예외를 던져야 한다.
  • 컴파일 시점에 확인이 가능하다.

❌ Unchecked Exception


RuntimeException 클래스를 상속받는 예외 클래스들은 복구 가능성이 없는 예외들로 컴파일러가 예외처리를 강제하지 않는다.

언체크 예외는 Error와 마찬가지로 에러를 처리하지 않아도 컴파일 에러가 발생하지 않는다.

  • 런타임 에러는 예상치 못한 상황에서 발생하는 것이 아니므로 예외처리를 강제하지 않는다.

특징

  • 예외처리를 강제하지 않는다.
  • 컴파일러가 잡아주지 않아 개발자가 실수로 예외를 누락할 수 있다.

 

트랜잭션에서의 Rollback ❓


DB 트랜잭션의 상황에서 CheckedException, UncheckedException이 발생했을 경우 Rollback을 할지 말지는 우리가 정하는 것이다.

  • UncheckedException 인 경우에도 어떤 exception은 롤백이 가능, 어떤 것은 롤백이 안되도록 할 수 있다.

스프링의 Transaction

스프링은 트랜잭션 처리

기본

  • RuntimeException 같은 경우는 바로 Rollback을 한다.
  • checked exception같은 경우는 Rollback을 하지 않는다.

옵션

rollbackFor 옵션

@Transactional 에서 rollbackFor 속성을 지정하면 특정 Exception 발생시 데이터를 커밋하지 않고 롤백하도록 변경할 수 있다.

⇒ 기본값 : RuntimeException, Error

  • rollbackFor 속성으로 다른 Exception을 추가해도 RuntimeException과 Error는 지정된 값으로 데이터를 롤백한다.

noRollbackFor 옵션

  • unchecked exception 중에서도 어느 exception은 롤백을 하지 않도록 할 수도 있다

참고 자료

https://steady-coding.tistory.com/583

https://mangkyu.tistory.com/152

https://www.youtube.com/watch?v=_WkMhytqoCc&ab_channel=백기선

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/transaction/annotation/Transactional.html