-
[김영한 스프링] 18. 자바 예외 이해 - 예외 계층 & 예외 기본 규칙Spring/스프링 DB 1편 - 데이터 접근 핵심 원리 2023. 12. 29. 16:01
예외 계층
스프링이 제공하는 예외 추상화를 이해하기 위해서는 먼저 자바 기본 예외에 대한 이해가 필요하다.
예외는 자바 언어의 기본 문법에 들어가기 때문에 대부분 아는 내용일 것이다. 예외의 기본 내용을 간단히 복습하고, 실무에 필요한 체크 예외와 언체크 예외의 차이와 활용 방안에 대해서도 알아보자.
예외 계층
예외 계층 그림
- Object : 예외도 객체이다. 모든 객체의 최상위 부모는 Object이므로 예외의 최상위 부모도 Object이다.
- Throwable : 최상위 예외이다. 하위에 Exception과 Error가 있다.
- Error : 메모리 부족이나 심각한 시스템 오류와 같이 애플리케이션에서 복구 불가능한 시스템 예외이다. 애플리케이션 개발자는 이 예외를 잡으려고 해서는 안된다.
- 상위 예외를 catch로 잡으면 그 하위 예외까지 함께 잡는다. 따라서 애플리케이션 로직에서는 Throwable 예외도 잡으면 안 되는데, 앞서 이야기한 Error 예외도 함께 잡을 수 있기 때문이다. 애플리케이션 로직은 이런 이유로 Exception부터 필요한 예외로 생각하고 잡으면 된다.
- 참고로 Error도 언체크 예외이다.
- Exception : 체크 예외
- 애플리케이션 로직에서 사용할 수 있는 실질적인 최상위 예외이다.
- Exception과 그 하위 예외는 모두 컴파일러가 체크하는 체크 예외이다. 단 RuntimeException은 예외로 한다.
- RuntimeException : 언체크 예외, 런타임 예외
- 컴파일러가 체크하지 않는 언체크 예외이다.
- RuntimeException과 그 자식 예외는 모두 언체크 예외이다.
- RuntimeException의 이름을 따라서 RuntimeException과 그 하위 언체크 예외를 런타임 예외라고 많이 부른다. 여기서도 앞으로는 런타임 예외로 종종 부르겠다.
예외 기본 규칙
예외는 폭탄 돌리기와 같다. 잡아서 처리하거나, 처리할 수 없으면 밖으로 던져야 한다.
예외 처리
- 5번에서 예외를 처리하면 이후에는 애플리케이션 로직이 정상 흐름으로 동작한다.
예외 던짐
예외를 처리하지 못하면 호출한 곳으로 예외를 계속 던지게 된다.
예외에 대해서는 2가지 기본 규칙을 기억하자.
- 1. 예외는 잡아서 처리하거나 던져야 한다.
- 2. 예외를 잡거나 던질 때 지정한 예외뿐만 아니라 그 예외의 자식들도 함께 처리된다.
- 예를 들어서 Exception을 catch로 잡으면 그 하위 예외들도 모두 잡을 수 있다.
- 예를 들어서 Exception을 throws로 던지면 그 하위 예외들도 모두 던질 수 있다.
참고 : 예외를 처리하지 못하고 계속 던지면 어떻게 될까?
- 자바 main() 쓰레드의 경우 예외 로그를 출력하면서 시스템이 종료된다.
- 웹 애플리케이션의 경우 여러 사용자의 요청을 처리하기 때문에 하나의 예외 때문에 시스템이 종료되면 안 된다. WAS가 해당 예외를 받아서 처리하는데, 주로 사용자에게 개발자가 지정한, 오류 페이지를 보여준다.
출처 : https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-db-1
'Spring > 스프링 DB 1편 - 데이터 접근 핵심 원리' 카테고리의 다른 글
[김영한 스프링] 20. 자바 예외 이해 - 체크, 언체크 예외 활용 (2) 2024.01.01 [김영한 스프링] 19. 자바 예외 이해 - 체크, 언체크 예외 기본 이해 (0) 2023.12.30 [김영한 스프링] 17. 스프링과 문제 해결(트랜잭션) - 스프링부트의 자동 리소스 등록 (0) 2023.12.29 [김영한 스프링] 16. 스프링과 문제 해결(트랜잭션) - 트랜잭션 AOP (1) 2023.12.29 [김영한 스프링] 15. 스프링과 문제 해결(트랜잭션) - 트랜잭션 템플릿 (1) 2023.12.29