프로그램 오류, 메모리 부족 등 시스템 자체에 비정상적인 상황이 발생한 문제로 프로그램에 심각한 문제를 발생시킬 수 있다. 또한, 개발자가 미리 예측해 방지할 수 없다.
시스템 로직 내부에서 예기치 못한 문제가 발생한 것으로 개발자가 예외 처리를 통해 미리 방지할 수 있다.
RuntimeException의 하위 클래스가 아닌 Exception 클래스이다. 체크 예외는 반드시 예외를 처리하는 코드를 함께 작성해야 한다. try/catch문 또는 throws를 이용해 예외를 처리할 수 있다. 만약 예외를 처리하지 않으면 컴파일 에러가 발생한다.
ex) FileNotFoundException, ClassNotFoundException
RuntimeException의 하위 클래스이다. 에러 처리를 강제하지 않아 에러 처리를 하지 않아도 컴파일 에러가 발생하지 않는다. 주로 프로그램에 문제가 있을 때 오류가 발생하도록 의도된 것이다. 개발자가 부주의해 발생할 수 있는 경우 오류가 발생하도록 만들어졌다.
ex) NullPointerException, IllegalArgumentException
중요 ❗️
Spring이 제공하는 트랜잭션(@Transactional
)은 기본적으로 에러 발생 시 체크 예외는 롤백이 되지 않고, 언체크 예외(RuntimeException 계열)는 롤백이 된다. 언체크 예외를 롤백하는 이유는 복구 가능성이 없어 예외 처리를 강제하지 않기 때문이다.
하지만 option으로 언체크 예외도 롤백을 하지 않도록/체크 예외도 롤백을 하도록 설정할 수 있다.