ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • CheckedException 과 UncheckedException
    ☕️ java 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

    '☕️ 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

    댓글

Designed by Tistory.