예외 처리 방법

  1. 예외를 파악+해결해서 정상으로 돌려놓기

기본 작업 흐름이 불가능하면 다른 작업 흐름으로 자연스럽게 유도한다.

  1. 예외처리를 자신을 호출한 쪽으로 던진다. (예외 되던지기)

throws를 선언해 예외를 알아서 던져지게 하거나

catch로 잡은 후에 로그와 함께 다시 예외를 던진다. 아래는 예시다.

public void add() throws SQLException{}
public void add() throws SQLException {
		try {
		} 
		catch(SQLException e) {
			throw e;
		}
}
  1. 예외의 전환: 예외를 메서드 밖으로 던진다. 단 그대로 넘기지 않고 적절한 예외로 전환해서 던진다.

목적 1: 내부 예외를 그대로 던지는 것이 예외상황에 대한 적절한 의미를 부여해주지 못하기 때문.

예: 서비스 계층 등에서 왜 SQLException이 발생했는 지 쉽게 알 수 없다.

해결: DAO에서 SQLException 정보를 해석해서 DuplicateUserIdException으로 바꿔 던진다.

중복 아이디 값으로 에러가 나는 경우 아래처럼 예를 들 수 있다.

try {
} catch(SQLException e) {
			if(e.getErrorCode() == MysqlErrorNumbers.ER_DUP_ENTRY)
					throw DuplicateUserIdException(); // 체크하셈.
			else throw e; // 그 외의 경우는 그대로 SQLException 던진다.
}

보통 전환하는 예외에 원래 발생한 예외를 담아서 중첩 예외로 만드는 것이 좋다.

중첩 예외 만드는 방법

... throw DuplicateUserIdException(e);
//또는 
... throw DuplicateUserIdException().initCause(e);

목적 2: 예외를 처리하기 쉽고 단순하게 만들기 위해서 포장하는 것이다.