-
자바 예외 종류 및 Exception 처리Java 2023. 8. 13. 15:00
Error와 Exception의 차이
- Error
- 시스템에 비정상적인 상황이 생겼을 때 발생한다.
- 개발자가 미리 예측이 어렵다.
- Exception
- 개발자가 구현한 로직에서 발생한다.
- Exception이 발생할 상황을 예측해 처리할 수 있다.
Exception 클래스의 구조
- 모든 예외 클래스는 Throwable 클래스를 상속받고 있다.
- RuntimeException은 CheckedException과 UnCheckedException을 구분하는 기준이다.
- RuntimeException을 제외한 모든 클래스는 CheckedException이다.
- CheckedException
- 반드시 예외 처리를 해야한다.
- 컴파일 단계에서 확인이 가능하다.
- 롤백을 하지 않는다.
- IOException, SQLException, ClassNotFoundException이 존재한다.
- try/catch로 감싸고 throw로 던져 처리한다.
- UnCheckedException
- 명시적인 처리를 강제하지 않음
- 실행단계에서 확인이 가능하다.
- 롤백을 한다.
- NullPointerException, IndexOutBoundException, SystemException이 존재한다.
- 순수 자바 관점에서는 롤백을 하지 않아도 된다.

Exception Exception 처리 방법
1. 예외 복구
for (int i = 3; i > 0; i--) { try { // code.... // 예외가 발생 return; // 예외 발생이 없으면 리턴 } catch (Exception e) { // 로그 출력 및 일정 시간만큼 대기 } finally { // 리소스 반납 및 정리 } } throw new CustomException(); // 예외 복구 실패 시, 직접 예외 발생- 예외가 발생해도 정상적인 흐름으로 진행된다.
- 예외가 발생하면 일정시간 만큼 재시도를 통해 정상적인 흐름으로 만들거나, 예외를 미리 예측해 다른 흐름으로 유도시키도록 구현하면 예외가 발생해도 정상적인 작업이 가능하다.
2. 예외 처리 회피
// 예시 1 public void exceptionTest() throws Exception { // code.... } // 예시 2 public String exceptionTest() throws Exception { try { // code.... // 예외가 발생 return "success"; } catch (Exception e) { throw e; // 예외 날린다. } }- throws를 통해 호출한 쪽으로 예외를 던진다.
- 2가지 경우에 예외 처리 회피 방법을 사용한다.
- 호출한 쪽에서 다시 예외를 받아 처리하도록 한다.
- 예외를 던지는 것이 최선의 방법이다.
3. 예외 전환
// 조금 더 명확한 예외로 던진다. public void add(User user) throws DuplicateUserIdException, SQLException { try { // ...생략 } catch(SQLException e) { if(e.getErrorCode() == MysqlErrorNumbers.ER_DUP_ENTRY) { throw DuplicateUserIdException(); } else throw e; } } // 예외를 단순하게 포장한다. public void someMethod() { try { // ...생략 } catch(NamingException ne) { throw new EJBException(ne); } catch(SQLException se) { throw new EJBException(se); } catch(RemoteException re) { throw new EJBException(re); } }- 예외를 잡아서 다른 예외로 던지는 것
- 호출한 쪽에서 예외를 받아 처리할 때, 명확하게 인지할 수 있도록 돕는 방법
- checkException 예외가 복구가 안되면 UnCheckedException으로 전환해 사용한다.
출처)
https://www.nextree.co.kr/p3239/
https://cocobi.tistory.com/146'Java' 카테고리의 다른 글
자바 알파벳과 아스키코드 (0) 2023.08.13 자바 데이터 타입 (0) 2023.08.13 자바 생성자(Constructor) 정리 (0) 2023.08.11 Java 특정 값 배열에 포함 여부 (String, int) (0) 2023.08.11 Java 제네릭(Generic) 정리(3)_generic의 extends, super, wildcard (0) 2023.08.11 - Error