티스토리 뷰

Java, Spring

[Java] 예외 (Exception)

집사킴 2025. 4. 14. 10:50
728x90

예외의 종류와 특징

Error

java.lang.Error 클래스의 서브클래스들

시스템에 뭔가 비정상적인 상황이 발생했을 경우 사용됨

ex) OutOfMemoryError, ThreadDeath

 

Exception

java.lang.Exception 클래스와 그 서브클래스들

개발자들이 만든 애플리케이션 코드의 작업 중에 예외상황이 발생했을 경우 사용

 

체크 예외 CheckedException

  • RuntimeException 클래스를 상속하지 않은 예외들
  • try/catch, throws를 사용하여 반드시 예외처리를 해야 함. 그렇지 않으면 컴파일 에러 발생

언체크 예외 UncheckedException

  • RuntimeException을 상속한 예외들
  • try/catch, throws로 처리하지 않아도 상관없음
  • ex) NullPointerException, IllegalArgumentException 등

 

예외처리 방법

 

예외 복구

예외 상황을 파악하고 문제를 해결해서 정상 상태로 돌려놓는 것

ex) 파일 읽기 요청 처리 중 IOException 발생 시 다른 파일을 이용하도록 사용자에게 안내

ex) DB 접속 실패하여 SQLException 발생 시 재시도 처리

int maxRetry = 5;
while(maxRetry-- > 0) {
	try {
		// 예외가 발생할 가능성이 있는 로직
		return; // 성공
	} catch (SomeException e) {
		// 로그 출력. 정해진 시간만큼 대기
	} finally {
		// 리소스 반납. 작업 정리
	}
}
throw new RetryFailedException(); // 최대 재시도 횟수 넘기면 직접 예외 발생

 

예외처리 회피

예외처리를 자신이 담당하지 않고 자신을 호출한 쪽으로 던져버리는 것

예외를 잡아서 아무런 조치를 취하지 않거나 의미 없는 throws 선언을 남발하는 것은 위험하다. 예외를 회피하는 것은 예외를 복구하는 것처럼 의도가 분명해야 한다

public void add() throws SQLException { ... }

 

예외 전환 (exception translation)

발생한 예외를 적절한 예외로 전환해서 던지는 것

 

1. 상황의 분명한 의미를 가진 다른 예외로 변경

ex) JDBC에서 duplicated key error로 인해 SQLException 발생 시, DuplicatedUserIdException과 같은 예외로 변경

public void add(User user) throws DuplicatedUserIdException, SQLException {
	try {
		// ...
	} catch (SQLException e) {
		if (e.getErrorCode() == MySqlErrorNumbers.ER_DUP_ENTRY) {
			throw DuplicatedUserIdException(e); // 중첩 예외 (nested exception)
		} else {
			throw e;
		}
	}
}

 

2. 런타임 예외로 포장

예외처리를 강제하는 체크 예외를 언체크 예외인 런타임 예외로 바꾸는 것

불필요한 catch/throws를 피할 수 있음

try {
	OrderHome orderHome = EJBHomeFactory.getInstance().getOrderHome();
	Order order = orderHome.findByPrimaryKey(id);
	
} catch (NaminingException ne) {
	throw new EJBException(ne);
	
} catch (SQLException se) {
	throw new EJBException(se);
	
} catch (RemoteException re) {
	throw new EJBException(re);
}

 

 

참고

https://product.kyobobook.co.kr/detail/S000000935358

 

토비의 스프링 3.1 Vol 1: 스프링의 이해와 원리 | 이일민 - 교보문고

토비의 스프링 3.1 Vol 1: 스프링의 이해와 원리 | 대한민국 전자정부 표준 프레임워크 스프링을 설명하는 No. 1 베스트셀러! 단순한 예제를 스프링 3.0과 스프링 3.1의 기술을 적용하며 발전시켜 나

product.kyobobook.co.kr

 

728x90
댓글
300x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/07   »
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 31
글 보관함