둘의 차이는 RuntimeException을 상속하는가 여부에 따라 다릅니다.
RuntimeException을 상속하면 UncheckedException이 됩니다.
스프링 트랜잭션 추상화(@Transactional)에서 rollback 대상은 바로 UncheckedException 입니다.
- 예외(Exception)
java.lang.Exception 클래스의 서브 클래스들은 Error와 달리 애플리케이션 코드에서 예외가 발생하였을 경우에 사용된다. 그리고 Exception은 다시 체크 예외(Checked Exception)와 언체크 예외(Unchecked Exception)로 구분된다 - 체크 예외(Check Exceptioin)
체크 예외는 RuntimeException 클래스를 상속하지 않은 Exceptioin 클래스들입니다.
체크 예외는 프로그램 상으로 의도한 예외가 아니므로 반드시 예외를 처리하는 코드를 함께 작성해야 합니다.
예외를 처리하기 위해서는 catch 문으로 잡거나 throws를 통해 메소드를 밖으로 던질 수 있습니다.
만약, 예외를 처리하지 않으면 컴파일 에러가 발생합니다. - 언체크 예외(Unchecked Exception)
RuntimeException 클래스를 상속한 Exception 클래스들은 예외 처리를 강제하지 않기 때문에 언체크 예외라고 불린다.
언체크 예외는 Error와 마찬가지로 에러를 처리하지 않아도 컴파일 에러가 발생하지 않는다.
RuntimeException은 주로 프로그램에 문제가 있을 때 오류가 발생하도록 의도된 것으로 NullPointerException이나 IllegalArgumentException 등과 같은 것들이 대표적입니다.
이러한 언체크 예외들은 피할 수 있지만, 개발자가 부주의해서 발생할 수 있는 경우에 문제를 유발하도록 만들어졌습니다. 즉, 런타임 예외는 예상치 못했던 상황에서 발생하는 것이 아니므로 굳이 예외 처리를 강제하지 않습니다. - 위에서 설명한 체크 예외와 언체크 예외의 차이를 아는 것은 매우 중요합니다.
왜냐하면 스프링 프레임워크가 제공하는 선언적 트랜잭션(@Transactional) 안에서 에러 발생 시
체크 예외는 롤백이 되지 않고, 언체크 예외는 롤백이 되기 때문입니다. (물론, 옵션 변경 가능)
'Back-end > Java' 카테고리의 다른 글
[Java] String = " " VS new String(" ") (0) | 2022.03.08 |
---|---|
[Java] Wrapper class (0) | 2022.03.07 |
[Java] equals() 와 hashCode() (0) | 2022.03.07 |
[Java] 자바에서 null을 안전하게 다루는 방법 (0) | 2021.11.21 |
[Java] Mutable 객체와 Immutable 객체의 차이점 (0) | 2021.11.21 |