본문 바로가기
Back-end

Checked Exception vs Unchecked Exception(+ Transaction)

by 신재권 2022. 10. 20.

Checked Exception

프로그램이 제어할 수 없는 오류를 뜻한다.

예를 들어 FileInputStream의 생성자 사용 시 입력 파일이 존재하지 않을 경우 FileNotFoundException을 발생시킨다.

Java는 컴파일 타임에 Checked Exception을 확인한다.

따라서 Checked Exception을 선언하려면 throw나 try-catch 블록을 사용해야 한다.

 

Unchecked Exception

프로그램에서 확인되지 않은 예외가 발생하면 프로그램 논리 내부에 오류가 생기는 것

예를 들어 숫자를 0으로 나누면 ArithmeticException이 발생한다.

컴파일 시점에 Unchecked Exception은 확인하지 않는다.

또한 throw, try-catch 블록으로 예외를 잡을 필요가 없다.

즉 컴파일 시간 동안은 오류가 없지만, 런타임 시간에 발생하는 오류이다.

Oracle Java 설명서에서는 “클라이언트가 예외로부터 복구할 것을 예상할 수 있다면 이를 확인된 예외로 만들고, 클라이언트가 예외로부터 복구하기 위해 아무것도 할 수 없으면 확인되지 않은 예외로 만들어라” 라고 한다.

 

트랜잭션 롤백 처리

Spring의 Transactional 어노테이션은 기본 정책이 UnChecked Exception과 Error이다. 즉 Checked Exception에서는 영향이 없다.

하지만 이건 어디까지나 기본값일 뿐이지 개발자에 의해 Transaction을 설정해 반대로 설정할 수 도 있고, 특정한 예외에서는 롤백이 발생하게, 안하게 할 수 있다.

  • @Transactional(rollbackFor = Exception.class); // 모든 예외 롤백
  • Checked Exception을 try-catch문으로 더 구체적인 Unchecked Exception으로 처리한다.

'Back-end' 카테고리의 다른 글

BackEnd(Java/Spring) 기술면접  (3) 2023.05.09
객체지향 생활 체조 원칙 9가지  (0) 2022.11.07
Session 이란?  (0) 2022.10.17
[Spring Security] 스프링 시큐리티  (0) 2022.10.17
다양한 연관관계 매핑  (0) 2022.09.15