본문 바로가기

JAVA

자바의 예외구분 Checked Exception, Unchecked Exception

1. Error와 Exception


우리가 개발하는데 있어서 Error와 Exception이란 단어를 많이 접해봤을 것이다. 

 

Error와 Exception에 대한 정확한 정의와, Exception의 종류에 대해서 포스팅 하고자 한다.

 

 

Error 란 시스템에서 발생하는 심각한 수준의 오류를 의미하며 개발자가 예측할수 없어 개발시 예외처리에 신경쓰지 않아도된다.

 

Exception 이란 프로그램 로직에서 발생하는 오류로 개발시 작성된 코드에서 발생하여 사전에 예외를 예측할 수 있어 상황에 맞게 처리하는 것이다.

 

이런 예외클래스는 Throwable 클래스를 기반으로 Error와 Exception으로 나뉘고, 이때 Exception 클래스는 RuntimeException 클래스의 상속여부에 따라 CheckedException 과 UncheckedException 으로 나뉘게 된다.

 

2. Checked Exception 과 Unckecked Exception


그렇다면 CheckedException 과 UnckeckedException 의 차이점에대해서 알아보자

 

  Checked Exception Unchecked Exception
확인 시점 컴파일 시점 런타임 시점
처리 여부 반드시 예외처리를 해주어야 한다. 명시적으로 하지 않아도 된다.
트랜잭션 처리 예외 발생시 Rollback 하지 않음 예외 발생시 Rollback 해야됨
종류 IOException, SQLException ... NullpointerException, IndexOutOfBoundException ...

 

3. 예외 처리 방법


실제로 예외를 발생시키면서 3가지 예외처리 방법을 소개하고자 한다.

 

1. 예외 복구

 

예외 복구란 try-catch-finally 문을 사용하여 예외상황을 파악하고 정상상태로 되돌려놓는 방법을 말한다.

 

Checked Exception 의 종류중 하나인 IOException 을 예를들면

 

 

write 메소드 밑에 빨간줄이 들어간것을 볼 수 있다. 그 이유는 Checked Exception은 컴파일 시점에서 예외를 확인하므로 반드시 예외처리를 해줘야하기 때문에 예외처리를 해야한다.

 

 

Unchecked Exception 의 종류중 하나인 NullPointerExcepion으로 예를들면

 

Checked Exception 과는 다르게 컴파일이 문제가 없기때문에 런하기 전까지 에러를 잡지 못하는 모습이다.

 

2. 예외처리 회피

 

예외처리 회피란 예외처리를 직접 담당하지 않고 호출한 쪽으로 던져서 회피하는 방법으로 긴밀하게 역할을 분담하고 있는 관계가 아니라면 그냥 예외를 던지는것은 무책임하고, 무분별하게 사용하는 경우 코드의 퀄리티가 떨어지는 방법이다.

 

Checked Exception

 

Unckecked Exception

 

3. 예외 전환

 

예외 전환은 예외를 적절한 예외로 전환해서 자신을 호출할 쪽으로 던져버리는 방법으로

 

Checked Exception 이 발생했을 때 RuntimeException을 발생시켜 자신을 호출할 쪽으로 던저버리는 방식으로 사용한다.