Java 예외 분류

Copyright (c) 2015-, All Rights Reserved by Kwanghoon Choi
(아래 자바 프로그래밍 강의 교재의 내용을 자유롭게 이용하되 다른 웹 사이트 등을 통한 배포를 금합니다.)

 

2. Java 예외의 분류: 검사 예외 vs. 비검사 예외 (Checked exception vs. Unchecked exception)

검사 예외는 프로그램에서 반드시 처리했으면 하는 예외이다. Java 컴파일러는 프로그램에서 검사 예외가 발생할 가능성이 있는데 처리하는 코드가 없다면 컴파일 에러를 내고 그 처리 코드를 작성할 것을 강요한다.

비검사 예외는 처리하면 좋겠지만 처리하지 않는다고 해서 Java 컴파일러가 컴파일 에러를 내는 것은 아닌, 다소 타협적인 예외다.

앞에서 설명한 예외 클래스 상속도를 다시 살펴보면, RuntimeException과 Error 클래스는 비검사 예외 클래스이고 이들 중 하나를 상속받아 정의한 예외 클래스도 비검사 예외 클래스로 Java언어에서 정의한다. 그 이외의 모든 예외 클래스는 검사 예외 클래스로 정의한다.

Object
 +--- Throwable
       +--- Exception
       |     +--- RuntimeException
       |     +--- ...
       |
       +--- Error
             +--- ...

검사 예외 클래스로 표현되는 에러의 발생 원인은 모두 프로그램 내부에 있고 그 에러가 발생할 수 있는 가능성을 미리 알 수 있고 또한 그 에러가 발생하면 복구해야하는 경우이다. 예를 들어, FileNotFoundException은 읽으려고 하는 파일이 삭제되었거나 이름을 잘못 지정한 것 등의 이유로 파일을 열지 못할 때 발생하는 에러를 표현한다.

비검사 예외 클래스를  Error 클래스 계열과 RuntimeException 클래스 계열 두 가지로 분류할 수 있다. Error 클래스 또는 그 계열이 표현하는 에러의 발생 원인이 프로그램 외부에 있는 경우로 에러 발생을 예측하기 어렵고 에러 발생을 안다고 해도 복구하기 어려운 경우이다. 예를 들어 하드웨어 문제난 운영체제 문제로 파일을 읽을 수 없어서 발생한 에러를 IOError 클래스로 표현한다.

RuntimeException 클래스 또는 그 계열이 표현하는 에러의 발생 원인은 프로그램 내부에 있는 경우이지만 예외 처리 방법으로 에러를 처리하기 보다 이러한 예외가 애초에 발생하지 않게 조처를 했어야 할 타입인 경우이다. 예를 들어, NullPointerException 예외는 분명히 프로그램의 오류로 인해서 발생한 것이고, 또한 널 변수를 참조하지 않게끔 처음부터 프로그램을 잘 작성했어야 하는 경우이다.

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *