[Spring] 예외

kiteB·2021년 10월 21일
0

Spring

목록 보기
2/3
post-thumbnail

오류 vs 예외

ExceptionError 모두 Throwable 클래스를 상속받고 있다.

오류 (Error)

  • java.lang.Error 클래스의 서브 클래스들이다.
  • 시스템에 비정상적인 상황이 발생했을 경우에 사용된다.
  • 주로 JVM에서 발생시키기 때문에 애플리케이션 코드에서 잡아서는 안되며, 잡아서 대응할 수 있는 방법도 없다.
  • 따라서 시스템 레벨에서 특별한 작업을 하는게 아니라면 이런 에러 처리는 하지 않아도 된다.

예외 (Exception)

  • java.lang.Exception 클래스의 서브 클래스들이다.
  • Error와 달리 애플리케이션 코드에서 예외가 발생하였을 경우에 사용된다.
  • 예외는 개발자가 처리할 수 있기 때문에 예외를 구분하고 그에 따른 처리 방법을 명확하게 알고 적용하는 것이 중요하다!

예외 종류

Checked Exception

RuntimeException 클래스를 상속하지 않은 Exception 클래스들

  • 실행하기 전에 예측 가능한 예외
  • 체크 예외는 예외가 발생할 수 있는 메서드를 사용할 경우 반드시 예외를 처리하는 코드를 함께 작성해야 한다.
  • 예외를 처리하기 위해서는 try - catch으로 잡거나 throws를 통해 메서드 밖으로 던질 수 있다.
  • 만약 예외를 처리하지 않으면 컴파일 에러가 발생한다.

Unchecked Exception

RuntimeException을 상속한 Exception 클래스들

  • 실행하고 난 후에 알 수 있는 예외
  • Error와 마찬가지로 에러를 처리하지 않아도 컴파일 에러가 발생하지 않는다.

💡 RuntimeException이란?

  • java.lang.RuntimeException 클래스를 상속한 예외들
  • 명시적인 예외 처리를 강제하지 않는다.
  • 런타임 예외는 주로 프로그램의 오류가 있을 때 발생하도록 의도된 것이다.
  • 대표적으로는 NullPointerException, IllegalArgumentException 등이 있다.

📌 Checked Exception vs Unchecked Exception 정리


가장 명확한 구분 기준은 꼭 처리를 해야 하는가!이다.


예외 처리

예외 처리 방법

  • 예외 복구: 예외가 발생하면 예외 상황에 대해 알맞게 처리하여 복구한다.
    • Ex) try - catch
  • 예외 회피: 예외를 직접 처리하지 않고 예외를 상위 메소드에 위임한다.
    • Ex) throw
  • 예외 전환: 예외를 위임하되 발생한 예외를 그대로 위임하는 것이 아닌 적절한 예외로 전환하여 위임한다.
    • Ex) RestTemplate.doExecute

예외 복구 범위

  • 메소드 영역: 메소드 영역은 종속된 복구 기능으로 단순히 try, catch를 사용하면 된다.
  • 클래스 영역: 클래스 내 공통 예외 복구는 @ExceptionHandler를 사용할 수 있다.
  • 전역 영역: 여러 클래스의 공통 예외 복구는 @ControllerAdvice를 사용할 수 있다.

정리

오늘은 예외에 대해서 알아보았다.
다음에는 예외 복구에 대해서 더 자세히 알아보고@ExceptionHandler, @ControllerAdvice 사용법에 더 자세히 알아볼 것이다🤩


참고자료

https://mangkyu.tistory.com/152
https://velog.io/@kdhyo/Java%EC%98%88%EC%99%B8Exception%EA%B4%80%EB%A0%A8-%EC%A0%95%EB%A6%AC

profile
🚧 https://coji.tistory.com/ 🏠

0개의 댓글