-
CheckedException 과 UncheckedException☕️ java 2022. 10. 10. 14:57
에러(Error) 와 예외(Exception)
에러(Error)는 시스템에 비정상적인 상황이 발생한 경우를 말한다.
- 시스템이 종료되어야 할 수준의 상황
- 애플리케이션 코드에서 잡을 수 없다.
→ 개발자가 미리 예측하여 방지할 수 없다.
ex) OutOfMemoryError, ThreadDeath, StackOverflowError 등
예외(Exception)은 개발자가 구현한 로직에서 발생한 실수 또는 사용자의 영향에 의해 발생한다.
- 개발자가 **미리 예측하여 방지할 수 있기에 상황에 맞는 예외처리(Exception Handle)**를 해야한다.
- Checked Exception과 Unchecked 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
'☕️ java' 카테고리의 다른 글
커스텀 validation 만들기 (0) 2023.01.28 equals / hashCode (0) 2022.12.07 가비지 컬렉션(GC) ❓ (0) 2022.10.10 Java version 별 특징 (0) 2022.10.09 HttpURLConnection (0) 2022.10.07