잘못된 조작이나 코딩 오류로 인한 프로그램 오류를 의미
예외가 발생하면 프로그램은 즉시 종료 처리된다.
그러나 예외 처리로 정상 동작을 유도할 수 있다.
모든 예외 클래스는 java.lang.Exception을 상속 받는다.
JVM에서 프로그램을 실행 중에 예외가 발생하면 해당 예외 클래스로 객체를 생성하며 예외 처리 코드에서 예외 객체를 사용 할 수 있도록 해준다.
예외는 두 가지로 나누어 볼 수 있다.
Exception - 체크 예외
Runtime Exception - 언체크 예외
[Runtime Exception / 하위클래스]
언체크 예외이자 실행 예외 클래스
[그 외의 예외 클래스]
체크 예외 또는 일반 예외 클래스
컴파일러가 강제로 예외 처리를 요구하는 예외이며 예외처리 코드를 확인하여 예외처리를 강제로 한다.
실행 시 예측할 수 없이 갑자기 발생하는 현상 때문에 예외 처리 코드를 확인하지 않으므로 예외 처리가 강제가 되지 않는다.
그러나 런타임 예외가 발생하면 프로그램이 비정상적으로 종료된다.
스프링에서 트랜잭션을 사용하였을 때를 보자
Checked 예외가 발생 했을 때는 실행 코드의 오류 발생까지 일부분 커밋이 된다.
※무조건 적으로 일부분 커밋이 되는 것은 아니며 사용자가 임의로 설정으로 오류 발생 시 롤백 설정 가능
Unchecked 예외가 발생 했을 때는 실행 코드의 전체가 롤백이 된다.