Checked Exception과 UnChecked Exception

헨도·2025년 6월 27일
0

SpringBoot

목록 보기
33/35
post-thumbnail

토비의 스프링 책 스터디를 하면서 예외처리 주제로 읽었는데, 체크 예외(Checked Exception)와 언체크 예외(UnChecked Exception)에 대해 공부했다.
책 내에도 자세하게 나와있지만, 조금 더 정리해보고 싶어 블로그를 적게됐다.

Exception

예외(Exception)은 프로그램 실행 도중 발생할 수 있는 예상치 못한 상황을 의미한다.
자바에서는 Throwable 을 최상위 클래스로, ErrorException 으로 나뉘며, 우리는 주로 Exception 을 다룬다.

Checked Exception

  • 컴파일 타임에 예외 처리 여부를 강제하는 예외
  • 예외 발생 가능성이 있는 코드에 반드시 try-catch 문이나 throws 키워드를 사용해야 하며 그렇지 않으면 컴파일 에러가 발생한다.

예시 코드

public void readFile() throws IOException {
	FileReader fr = new FileReader("test.txt"); // IOException 발생 가능
}

특징

  • 복구 가능한 예외로 취급
  • 외부 환경과의 상호작용(파일, 네트워크, DB 등)에서 자주 발생
  • 호출자에게 반드시 예외 상황을 인지시키고 처리하게끔 강제한다

대표적인 체크 예외

  • IOEXception
  • SQLException
  • ParseException

UnChecked Exception

  • 컴파일 타임에 예외 처리 여부를 강제하지 않는 예외
  • 예외 처리를 명시하지 않아도 컴파일이 가능하지만, 런타임 시점에 예외가 발생하면 프로그램이 종료된다.

예시 코드

public int divide(int a, int b) {
	return a / b; // b가 0이면 ArithmeticException 발생
}

특징

  • 복구가 어렵거나 비정상적인 상황에서 발생
  • 개발자의 코드 실수나 설계 미스에서 발생하는 경우가 많음
  • 예외 처리를 강제하지 않기 때문에 호출자가 상황에 맞게 처리 여부 결정 가능

대표적인 언체크 예외

  • NullPointerException
  • IllegalArgumentException
  • ArithmeticException
  • IndexOutOfBoundsException

스프링에서는?

스프링에서는 체크 예외보단 언체크 예외(RuntimeException 계열)을 권장한다.

UnChecked Exception 권장 이유

  • 비즈니스 로직을 깔끔하게 유지할 수 있고
  • 호출부에서 매번 throwstry-catch를 강제하지 않아 코드 복잡도가 감소한다.
  • 스프링의 @ControllerAdvice, @ExceptionHandler 같은 전역 예외 처리 기능과 궁합이 좋다.

UnChecked Exception 선언 예시 코드

public class InsufficientBalanceException extends RuntimeException {
	public InsufficientBalanceException(String message) {
    	super(message);
   	}
}

전역 예외 처리 예시 코드

@ControllerAdvice
public class GlobalExceptionHandler {
	@ExceptionHandler(InsufficientBalanceException.class)
    public ResponseEntity<String> handleInsufficientBalance(InsufficientBalanceException e) {
    	return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(e.getMessage());
    }
}

정리

구분Checked ExceptionUnChecked Exception
처리 강제 여부O (컴파일 타임)X (런타임)
복구 가능성복구 가능복구 어려움
주요 발생 상황외부 환경 문제(파일, DB, 네트워크)개발 실수, 논리 오류, 비정상 상황
스프링 권장 방식가급적 사용 지양RuntimeException 상속하여 사용
  • 스프링에서는 비즈니스 로직의 가독성과 유지보수를 위해 체크 예외보다 언체크 예외를 사용하고, 전역 예외 처리로 일관성 있게 관리하는 설계를 권장
profile
Junior Backend Developer

0개의 댓글