
개요
Checked Exception, Unchecked Excpetion 차이점 알아보기
ERROR? EXCEPTION?
Error(에러)
에러는 시스템에 비정상적인 상황이 발생한 경우에 해당한다.
ex) OutOfMemoryError, ThreadDeath, StackOverflowError 등이 에러에 해당
(일반적으로 애플리케이션단에서 복구할 수 없는 상황)
Error는 합리적인 응용 프로그램이 잡아내려고 해서는 안 되는 심각한 문제를 나타내는 Throwable의 하위 클래스입니다. 이러한 오류는 대부분 비정상적인 상태입니다.
https://docs.oracle.com/javase/6/docs/api/java/lang/Error.html
Exception(예외)
예외란 입력 값에 대한 처리가 불가능하거나, 프로그램 실행 중에 참조된 값이 잘못된 경우 등 정상적인 프로그램의 흐름을 어긋나는 경우를 말한다. 그리고 자바에서 예외는 개발자가 직접 처리할 수 있기 때문에 예외 상황을 미리 예측하여 핸들링할 수 있다.
Exception 클래스와 그 하위 클래스는 합리적인 응용 프로그램이 포착할 수 있는 조건을 나타내는 Throwable 형식입니다.
https://docs.oracle.com/javase/6/docs/api/java/lang/Exception.html
예외 구분
예외는 Checked Exception과 Unchecked Exception으로 구분된다.
Checked Exception
- RuntimeException을 상속하지 않은 예외 클래스
- 명시적인 예외 처리를 강제하기 때문에 Checked Exception이라 한다.
반드시 try~catch로 예외를 잡거나, throw로 호출한 메소드에게 예외를 던져야 한다.
Unchecked Exception
- RuntimeException을 상속하는 예외 클래스
- 명시적인 예외 처리를 강제하지 않기 때문에 Uncheked Exception이라고 한다.

구분 | Checked Excpetion | Unchecked Exception |
확인 시점 | 컴파일(Compile) 시점 | 런타임(Runtime) 시점 |
예외 처리 | 명시적 예외 처리 강제 (반드시 예외 처리해야함) |
명시적 예외 처리 강제하지 않음 |
종류 | IOException, FileNotFoundException 등 | NullPointerException, ClasssCastException 등 |
SpringFramework에서 Checked Exception이 기본적으로 Rollback되지 않는 이유?
Spring의 기본 트랜잭션 처리 정책에 따르면, RuntimeException이나 Error와 같은 Unchecked Exception이 발생했을 때만 자동으로 트랜잭션이 rollback됩니다. 반면, Checked Exception은 기본적으로 rollback되지 않습니다.
이는 Spring이 Checked Exception을 개발자가 복구 가능한 상황으로 판단할 가능성이 높다고 간주하기 때문입니다. 예를 들어, 특정 이미지 파일을 찾는 함수에서 파일이 없을 경우, 기본 이미지를 반환하는 방식으로 복구 전략을 세울 수 있습니다.
Spring은 이러한 예외 상황에서 트랜잭션을 무조건 rollback하는 대신, 개발자에게 rollback 여부를 명시적으로 지정하도록 유도합니다.
따라서 Checked Exception의 경우에도 필요하다면 @Transactional(rollbackFor = MyCheckedException.class)와 같이 설정하여 rollback을 명시할 수 있습니다.
'개발메모 > 간단정리' 카테고리의 다른 글
[간단정리] JAVA - 제네릭(Generic)이란? (0) | 2022.08.23 |
---|---|
[간단정리] 트랜잭션 격리수준(Isolation Level) (0) | 2022.08.13 |
[간단정리] DB 클러스터링, 리플리케이션이란? (0) | 2022.07.19 |
[간단정리] Redis(레디스)란? (0) | 2022.07.07 |
[간단정리] ELK? ELK Stack이란? (0) | 2022.07.05 |