자바에서 에러, 예외 관련된 클래스들의 계층구조는 위와 같습니다. Throwable 클래스를 기준으로 Error, Excepton 클래스로 나뉘어집니다. 왼쪽에 보이는 Error는 말 그대로 에러와 관련된 클래스입니다. 그리고 오른쪽에 보이는 Exception도 말 그대로 예외와 관련된 클래스입니다. 자바에서 실행 시(runtime) 발생할 수 있는 프로그램 오류를 에러(error)와 예외(exception) 두 가지로 구분하였습니다.
위의 자바 에러 클래스의 계층 구조를 보았을 때 RuntimeException의 하위 클래스들이 Uncheck Exception이라 하고 RuntimeException의 하위 클래스가 아닌 Exception 클래스의 하위 클래스들을 Checked Exception이라고 합니다.
체크 예외는 RuntimeException의 하위 클래스가 아니면서 Exception 클래스의 하위 클래스들입니다. 체크 예외의 특징은 반드시 에러 처리를 해야하는 특징(try / catch or throw)을 가지고 있습니다.
존재하지 않는 파일의 이름을 입력(FileNotFoundException)
실수로 클래스의 이름을 잘못 적음(ClassNotFoundException)
언체크 예외는 RuntimeException의 하위 클래스들을 의미합니다. 이것은 체크 예외와는 달리 에러 처리를 강제하지 않습니다.
실행 중에(runtime) 발생할 수 있는 예외를 의미합니다.
배열의 범위를 벗어난 경우(ArrayIndexOutOfBoundsException)
값이 null인 참조변수를 참조(NullPointerException)
Checked Exception | Unchecked Exception | |
처리 여부 | 반드시 예외를 처리해야 함 | 명시적인 처리를 강제하지 않음 |
확인 시점 | 컴파일 단계 | 실행 단계 |
예외 발생시 트랜잭션 처리 | roll-back 하지 않음 | roll-back 함 |
대표 예외 | Exception의 상속받는 하위 클래스 중 Runtime Exception을 제외한 모든 예외 - IOException - SQLExeption |
RuntimeException 하위 예외 - NullPointerException -IllegalArgumentException -IndexOutOfBoundException SystemException |