티스토리 뷰
자바 예외
Object : 예외도 객체이다. 모든 객체의 최상위 부모는 Object 이므로 예외의 최상위 부모도 Object 이다.
Throwable : 최상위 예외이다. 하위에 Exception 과 Error 가 있다.
Error : 메모리 부족이나 심각한 시스템 오류와 같이 애플리케이션에서 복구 불가능한 시스템 예외이다. ( 언체크 예외 )
- 애플리케이션 개발자는 이 예외를 잡으려고 해서는 안된다.
- 상위 예외를 catch 로 잡으면 그 하위 예외까지 함께 잡는다.
- 따라서 애플리케이션 로직에서는 Throwable 예외도 잡으면 안되는데, 앞서 이야기한 Error 예외도 함께 잡을 수 있기 때문이다.
- 애플리케이션 로직은 이런 이유로 Exception 부터 필요한 예외로 생각하고 잡으면 된다.
Exception : 체크 예외, 처리 or throws 예외 선언
- 애플리케이션 로직에서 사용할 수 있는 실질적인 최상위 예외이다.
- Exception 과 그 하위 예외는 모두 컴파일러가 체크하는 체크 예외이다.
RuntimeException : 언체크 예외 (런타임 예외) , throws 예외 선언 안해도 됨
- 컴파일러가 체크 하지 않는 언체크 예외이다.
- RuntimeException 과 그 자식 예외는 모두 언체크 예외이다.
예외의 기본 규칙
- 예외가 발생한다면 호출당한 쪽에서는 예외를 던지고, 호출한 쪽에서는 예외를 처리해야 한다.
- 예외를 던지거나 처리할 때, 그 예외의 자식 예외들도 함께 처리된다.
언제 체크 예외와 언체크 예외를 사용할까?
기본적으로 언체크(런타임) 예외를 사용하자.
체크 예외는 비즈니스 로직에서 의도적으로 던지는 예외에만 사용하자. -> 계좌이체 실패, 로그인 ID, PW 불일치
예외 포함과 스택 트레이스
예외를 전환할 때 ( 체크 -> 언체크 ) 예외를 포함하지 않는다면 예외 메세지와 스택 트레이스를 확인할 수 없다.
예외를 전환하기 위해서는 예외를 포함하여 변경하는 것을 반드시 인지해야 한다.
SQLException의 errorCode
데이터베이스의 어떤 오류가 발생했는지 확인할 수 있는 코드
예외 변환으로 새로운 예외(직접 만든 예외)를 사용할 수 있다.
-> errorCode는 각 데이터베스마다 다르다. 데이터베이스를 변경할 경우 오류 코드도 수정해야 한다.
스프링 예외 추상화
- 데이터베이스에서 발생하는 오류 코드를 스프링이 정의한 예외로 자동으로 변환해준다.
- 특정 기술에 종속적이지 않을 수 있다.
+) JDBC 반복 문제 해결 - JDBC Template
커넥션 조회, 동기화 -> 파라미터 반딩 -> 쿼리 실행 -> 결과 바인딩> 예외 발생 처리 -> 리소스 종료
위와 같은 일련의 반복적인 코드를 JDBC Template을 통해 해결할 수 있다.
JDBC Template의 아래와 같은 코드 ( 다른 쿼리들도 존재 )로 위와 같이 간단한 코드를 사용할 수 있는 것이다.
본 포스팅은 인프런 강의 김영한님의
[ 스프링 DB 1편 - 데이터 접근 핵심 원리 ] 를 수강하며 작성한 내용입니다.