이 글은 PC 버전 TISTORY에 최적화 되어있습니다.
서론
이번에는 예외 클래스의 계층구조와 Exception 클래스에서 Runtime Exception 클래스를 제외한 Checked Exception 과 RuntimeException인 UnChecked Exception에 대해서 알아보도록 하겠습니다.
예외클래스의 구조
위의 그림은 예외클래스의 구조입니다. 모든 클래스의 조상은 Object 클래스이므로 Exception과 Error 클래스 역시 Object 클래스를 상속 받고 있습니다. Throwable 클래스를 상속 받는 클래스는 Error와 Exception이 있는데 모든 예외의 최고 조상 클래스는 당연히 Execption 입니다. Error 자체는 시스템 레벨의 심각한 영향을 주는 에러이기 때문에 시스템에 변화를 주어 문제를 처리해야 하는 경우가 일반적입니다. 하지만 Exception은 개발자가 충분히 로직을 추가하여 처리할 수 있는 부분이죠.
여기서 Exception 클래스는 많은 자식들을 가지고 있는데 이 예외 클래스들은 두 가지의 그룹으로 나눠질 수 있습니다. 이 중 Runtime Exception은 Checked Exception과Unchecked Exception을 구분하는 기준이므로 중요합니다. Checked Exception과 Unchecked Exception을 아래의 표로 비교해보겠습니다.
|
Checked Exception |
Unchecked Exception |
클래스 |
Exception 클래스의 자손들 중 Runtime Exception을 제외한 모든 클래스 |
Runtime Exception 클래스와 자손 클래스 |
처리여부 |
반드시 예외 처리 해야함 |
명시적 처리 강제하지 않음 |
확인시점 |
컴파일 단계 |
실행 단계 |
예외 발생 시 트랜잭션 처리 |
roll back 하지 않음 |
roll back 함 |
대표 예외 |
- IOException - SqlException |
- NullPointerException - IllegalArgumentException - IndexOutOfBoundException - SystemException |
public class CheckedException { public static void main(String[] args) { try { // Exception 클래스로 예외를 실행시킨다. throw new Exception(); } catch (Exception e) { // Checked Exception 이므로 예외처리를 해주는데 해주지 않으면 컴파일 실패 System.out.println("Exception 발"); } } }
public class ExceptionEx1 { public static void main(String[] args) { // 에러가 발생하지만 컴파일은 가능하다. throw new RuntimeException(); } }
주의점
참고사이트
'Basic > Java' 카테고리의 다른 글
[JAVA] 객체(Object)의 형 변환 (2) | 2016.07.19 |
---|---|
[JAVA] Static에 대하여 (0) | 2016.07.19 |
[JAVA] JVM의 메모리구조 (0) | 2016.07.19 |
[JAVA] 자바의 변수 (클래스 변수, 인스턴스 변수, 지역 변수) (6) | 2016.07.19 |
[JAVA] 절차지향언어와 객체지향언어 (0) | 2016.07.19 |
[자바] 예외처리 (1) - 예외처리란? (2) | 2016.07.08 |