Java/Spring

그거 아셨나요? - 체크 예외(Check Exception)

뽀루피 2024. 7. 28. 17:55

체크 예외란?

RuntimeException 클래스를 상속받지 않은 예외 클래스들을 말합니다. 체크 예외는 복구 가능성이 있는 예외이므로 반드시 예외를 처리하는 코드를 함께 작성해야 합니다. 예외를 처리하기 위해서는 catch 문으로 잡거나 throws를 통해 메소드 밖으로 던질 수 있습니다. 예외를 처리하지 않으면 컴파일 에러가 발생합니다.

 

반대로, 언체크 예외가 있습니다. RuntimeException 클래스를 상속받는 예외 클래스들은 복구 가능성이 없는 예외들이므로 컴파일러가 예외처리를 강제하지 않습니다. 즉, 에러를 처리하지 않아도 컴파일 에러가 발생하지 않습니다. 런타임 예외는 예상치 못했던 상황에서 발생하는 것이 아니므로 굳이 예외 처리를 강제하지 않습니다. RuntimeException에는 대표적으로 NullPointerException이나 IllegalArgumentException 등과 같은 것들이 있습니다.

 

 

위에서 설명한 체크 예외와 언체크 예외의 차이를 아는 것은 매우 중요합니다. 왜냐하면 스프링 프레임워크가 제공하는 선언적 트랜잭션(@Transactional)안에서 에러 발생 시 체크 예외는 롤백이 되지 않고, 언체크 예외는 롤백이 되기 때문입니다.

 

 

요약

체크 예외 = 컴파일 에러 발생

언체크 예외 = 런타임 에러 발생