일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Spring
- Kafka
- 네트워크
- Heap
- C
- 운영체제
- Proxy
- OS
- 자바
- 컴퓨터구조
- JavaScript
- MSA
- IT
- spring webflux
- 파이썬
- Algorithm
- 알고리즘
- Java
- JPA
- mongoDB
- MySQL
- Galera Cluster
- c언어
- 자료구조
- design pattern
- redis
- 백준
- 디자인 패턴
- react
- Data Structure
Archives
- Today
- Total
시냅스
Java 예외 관련 정리 본문
- 예외도 객체이므로 최상위 부모는 Object이다.
- Error
- 메모리 부족이나 심각한 시스템 오류이다.
- catch 해서는 안된다.
- 언체크 예외이다.
- Exception
- 체크 예외이다.
- RuntimeException 을 제외한 모두 하위는 컴파일러가 체크하는 체크 예외이다.
- RuntimeException
- 언체크 예외이다.
- RuntimeException 하위 모두 언체크 예외이다.
예외 기본 규칙
예외 처리 (catch)
예외 던짐 (throw)
- 예외는 잡아서 처리하거나 던져야 한다.
- 예외는 잡거나 던질 때 지정한 예외뿐만 아니라 그 예외의 자식들도 함께 처리된다.
- 예외를 처리하지 못하고 계속 던지면 main으로 넘어와 시스템이 종료된다.
체크 예외
- 체크 예외는 예외를 잡아서 처리할 수 없을 때 예외를 밖으로 던지는 throws 예외를 필수로 선언해야 한다.
- 예외를 잡아서 처리하지 않으면 항상 throws에 던지는 예외를 선언해야 한다.
- 컴파일러를 통해 throws 예외를 선언하지 않으면 오류로 알려준다.
- 다만 모든 체크 예외를 반드시 잡거나 던지도록 해야 하기 때문에 번거롭다.
- 또한 throws 사용하는 선언해야 하기 때문에 의존관계에 대한 문제가 발생한다.
- 만약 예외가 java.sql.SQLException 이라면 service, controller 계층에서도 throws SQLException을 선언해야 한다.
언체크 예외
- RuntimeException 과 하위 예외는 모두 언체크 예외이다.
- 컴파일러가 예외를 체크하지 않는다.
- 예외를 던지는 throws 를 선언하지 않고 생략할 수 있다.
- throws 예외를 생략하여 쓰고 싶지 않은 예외를 무시할 수 있다.
- 실수로 예외를 누락할 수 있다는 단점이 있다.
스프링 예외 추상화
- 스프링은 어떤 기술을 사용하던 제공하는 예외를 통해 추상화를 제공한다.
- JDBC나 JPA에서 발생하는 예외 또한 스프링이 제공하는 예외로 변환하는 역할을 한다.
- transient 예외
- 일시적 예외로 다시 시도했을 때 성공 가능성이 있다.
- 쿼리 타임 아웃, 락과 관련된 오류이다.
- Nontransient 예외
- 일시적이지 않은 예외이다.
- SQL 문법 오류, 데이터베이스 제약조건 위배 등이 잇다.
- 이러한 예외는 예외 변환기를 통해 확인할 수 있다.
catch (SQLException e) {
SQLExceptionTranslator exTranslator = new SQLErrorCodeSQLExceptionTranslator(dataSource);
//org.springframework.jdbc.BadSqlGrammarException
DataAccessException resultEx = exTranslator.translate("select", sql, e);
log.info("resultEx", resultEx);
}
'Java, Spring' 카테고리의 다른 글
Spring MyBatis 정리 (0) | 2022.09.03 |
---|---|
Spring JdbcTemplate 정리 (0) | 2022.09.02 |
Java 트랜잭션 관련 정리 (0) | 2022.08.25 |
Java 커넥션 풀과 데이터 소스 (0) | 2022.08.25 |
Java - JDBC 정리 (2) | 2022.08.24 |
Comments