Checked Exception과 Unchecked Exception 이란? 예외 처리 기법
# Language/Java

Checked Exception과 Unchecked Exception 이란? 예외 처리 기법

 

주제

  • Checked Exception과 Unchecked Exception
  • Exception별 예외 처리 방법

 


 

1. Error 와 Exception

1.1 Error와 Exception의 차이

  • Error와 Exception은 문제가 생겼다는 점에서 비슷하지만 다른 클래스이다.
  • Error란 시스템이 비정상적일 때 발생하고, 개발자가 미리 예측하거나 대처하기 어렵다
    • Ex) 메모리 부족(Out of Memory), 스택 오버플로우(StackOverflow)
  • Exception이란 개발자의 실수 혹은 구현한 코드 레벨에서 발생하는 오류로 미리 예측하거나 대처할 수 있다.
    • NullPointerException, FileNotFoundException 등등

 

1.2 Exception의 종류

Exception의 종류는 RuntimeException과 RuntimeException이 아닌 Exception 으로 구분할 수 있다.

1.2.1 RuntimeException(Unchecked Exception)

  • 예외 처리를 강제하지 않는다.
  • Application이 실행중일 때 발생하는 오류이다.
  • NullPointerException, ArithmeticException 등 직접 실행되지 않으면 발생하지 않기 때문에 예측하기 어려운 예외이다

 

1.1.1 그 외의 Exception(Checked Exception)

  • 반드시 예외 처리를 해야 하기 때문에 컴파일 할 때 미리 알 수 있다. 
    • 존재하지 않는 파일의 이름을 입력(FileNotFoundException)
    • 실수로 클래스의 이름을 잘못 적음(ClassNotFoundException)
  • 비교적 대처하기 쉽다. (실행하기 전에 식별이 가능함)
  • Try-Catch 문 혹은 throws 문을 사용해야 한다.

 

 

2. Exception별 예외 처리 기법

2.1 Rollback이 진행되어야 할 때

트랜잭션을 처리하다가 예외가 발생할 경우, 트랜잭션 작업 내용이 다시 원래 상태로 롤백되어야 할 수 있다.

// RuntimeException에 대한 Rollback
@Transactional
public void sync() {
	...
}


// RuntimeException이 아닌 Exception을 상속받은 모든 예외들에 대한 처리
@Transactional(rollbackfor = Exception.class)
public void sync() {
	...
}
  • rollbackfor 속성을 적절하게 이용하면 사용자가 커스터마이징한 Exception에 대해서도 예외 처리가 가능하다.

 

 

2.1 작업을 중단하고 적절한 처리를 해야할 때

public void sync() {
    try {
    	something();
    } catch (RollbackException e1) {
    	rollback();
    } catch (Exception e2) {
    	sendAlert();
        break();
    } finally {
    	killMemory();
    }
}
  • Try Catch 문을 적절하게 사용하면 Exception 마다 처리 방안을 마련할 수 있다.

 

2.3 책임 회피

public void sync() throws Exception {
    something();
    ...
}
  • 작업 중에 발생한 예외를 다른 클래스에 책임을 전가한다.
  • throw한 예외는 ControllerAdvice를 선언한 예외 처리 클래스를 통해 처리 가능하다.

 

 

# 참고자료

728x90