Checked Exception VS Unchecked Exception 비교

wooSim·2023년 7월 10일
0
post-thumbnail

1. Java에서 예외(Exception)란?


Java에서 문제 상황을 알리는 타입으로 검사예외, 런타임예외, 에러를 제공합니다. 여기서 검사예외를 Checked Exception(검사예외)으로 지칭하며 런타임예외, 에러 두개를 합쳐서 Unchecked Exception(비검사 예외)로 지칭합니다.

  • Checked Exception(검사예외): RuntimeException의 하위 클래스가 아니면서 Exception 클래스의 하위 클래스들입니다. 체크 예외의 컴파일 시점에 확인이 가능하기 때문에 Java에서는 반드시 에러 처리를 해야하는 특징(try/catch or throw)을 가지고 있습니다.
  • Unchecked Exception(비검사 예외): 이것은 체크 예외와는 달리 에러 처리를 강제하지 않아 말 그대로 실행 중에(runtime) 발생할 수 있는 예외를 의미합니다.

  • Error : 에러는 시스템에 비정상적인 상황이 발생한 경우에 해당
  • Exception(예외) : 입력 값에 대한 처리가 불가능하거나, 프로그램 실행 중에 참조된 값이 잘못된 경우 등 정상적인 프로그램의 흐름을 어긋나는 경우

여기서 Error는 개발자가 예측하기도 쉽지 않고 처리할 수 있는 방법도 없습니다. 그렇기 때문에 개발자가 직접 구현하는 비검사 Unchecked Exception(비검사 예외)는 모두 RuntimeException의 하위 클래스여야 합니다.



2. Checked Exception VS Unchecked Exception 비교


위에서도 명시하였지만 Checked Exception(검사예외)와 Unchecked Exception(비검사예외)의 특징을 한눈에 파악하기 위해 표로 정리해보겠습니다.

여기서 자칫 오해할 수 있는 부분이 있는데 트랜잭션 처리 부분입니다. 사실 트랜잭션에서 Unchecked Exception과 Checked Exception에서 트랜잭션 처리는 개발자가 직접 정할 수 있습니다. 많은 글에서 트랜잭션 처리에 대해 저렇게 비교한 이유는 기본적으로 Spring에서 Checked Exception일때는 롤백을 하지 않고 Unchecked Exception에서는 롤백을 하도록 설정되어 있기 때문일 것입니다.

트랜잭션 처리와 Exception부분에 대해 잘 못된 내용에 대해서는 백기선님이 설명해주신 동영상을 공유합니다!
자바 공부를 어떻게 하길래, "언체크드 예외 발생시 트랜잭션 롤백?_youtube 동영상

Spring에서도 기본적인 설정이지 @Transactional 어노테이션의 아래 옵션으로 충분이 설정이 가능합니다!
rollbackFor, rollbackForClassName, noRollbackFor, noRollbackForClassName

@Transactional(rollbackFor = Exception.class)
public void something1(int a) {
	...
}

@Transactional(noRollbackFor = { ExceptionA.class, ExceptionB.class })
public void somthing2() {
    ...
}

3. Checked Exception와 Unchecked Exception의 선택 기준

Unchecked Exception(비검사예외)와 Checked Exception(검사예외)의 선택 기준은 복구할 수 있는지 여부 입니다. 복구할 수 있는 상황이면 검사 예외를, 프로그래밍 오류라면 비 검사 예외를 던지고 확실하지 않다면 비 검사 예외를 던지면 됩니다(Checked Exception는 개발자들 사이에서 필요성 자체에 대해 의견이 분분하기도 합니다..).

profile
daily study

0개의 댓글