스프링 DB 1편(데이터 접근 핵심 원리)

Ch05. 자바 예외 이해 - 예외 계층 & 예외 기본 규칙

webmaster 2022. 4. 30. 09:18
728x90

예외 계층

예외 계층( Error, RuntimeException = unchedcked, 그 외 = checked)

  • Object : 예외도 객체이다. 모든 객체의 최상위 부모는 Object 이므로 예외의 최상위 부모도 Object이다.
  • Throwable : 최상위 예외이다. 하위에 Exception과 Error 가 있다.
  • Error : 메모리 부족이나 심각한 시스템 오류와 같이 애플리케이션에서 복구 불가능한 시스템 예외이다. 애플리케이션 개발자는 이 예외를 잡으려고 해서는 안된다.
    • 상위 예외를 catch로 잡으면 그 하위 예외까지 함께 잡는다. 따라서 애플리케이션 로직에서는 Throwable 예외도 잡으면 안 되는데, 앞서 이야기한 Error 예외도 함께 잡을 수 있기 때문에다. 애플리케이션 로직은 이런 이유로 Exception부터 필요한 예외로 생각하고 잡으면 된다.
    • 참고로 Error 도 언체크 예외이다.
  • Exception : 체크 예외
    • 애플리케이션 로직에서 사용할 수 있는 실질적인 최상위 예외이다.
    • Exception과 그 하위 예외는 모두 컴파일러가 체크하는 체크 예외이다. 단 RuntimeException 은 예외로 한다.
  • RuntimeException : 언체크 예외, 런타임 예외
    • 컴파일러가 체크하지 않는 언체크 예외이다.
    • RuntimeException과 그 자식 예외는 모두 언체크 예외이다.
    • RuntimeException의 이름을 따라서 RuntimeException과 그 하위 언체크 예외를 런타임 예외라고 많이 부른다. 여기서도 앞으로는 런타임 예외로 종종 부르겠다.

예외 기본 규칙

예외는 폭탄 돌리기와 같다. 잡아서 처리하거나, 처리할 수 없으면 밖으로 던져야 한다.

예외 처리 - 5번에서 예외를 처리하면 정상흐름반환
예외를 처리하지 못하면 service -> controller 로 예외를 던져야 한다.

  • 예외에 대해서는 2가지 기본 규칙을 기억하자.
  • 예외는 잡아서 처리하거나 던져야 한다.
  • 예외를 잡거나 던질 때 지정한 예외뿐만 아니라 그 예외의 자식들도 함께 처리된다.
    • 예를 들어서 Exception을 catch 로 잡으면 그 하위 예외들도 모두 잡을 수 있다.
    • 예를 들어서 Exception 을 throws로 던지면 그 하위 예외들도 모두 던질 수 있다

참고: 예외를 처리하지 못하고 계속 던지면 어떻게 될까?

  • 자바 main() 쓰레드의 경우 예외 로그를 출력하면서 시스템이 종료된다.
  • 웹 애플리케이션의 경우 여러 사용자의 요청을 처리하기 때문에 하나의 예외 때문에 시스템이 종료되면 안 된다. WAS가 해당 예외를 받아서 처리하는데, 주로 사용자에게 개발자가 지정한, 오류 페이지를 보여준다
728x90