시냅스

Java 예외 관련 정리 본문

Java, Spring

Java 예외 관련 정리

ted k 2022. 8. 25. 17:00

  • 예외도 객체이므로 최상위 부모는 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