How to handle Exception

김수환·2023년 10월 6일
0

예외 복구

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

example)

  • 해당 파일 없어서 IOException 발생시 다른 파일 이용하도록 안내
  • 원격 DB 서버 접속 실패해서 SQLException 발생시 일정 시간 대기 후 접속 다시 시도

예외처리 회피

자신이 처리하지 않고 자신을 호출한 쪽으로 예외를 던지는 방법.

  1. throws 문으로 선언
  2. try-catch로 잡아서 로그를 남기든 처리를 한 후 다시 예외 던지기
// 1)
public void method() throws Exception { }

// 2)
public void method() throws Exception {
	try {
   	...
    } 
    catch(Exception e) {
    	throw e; 
    }
}

example )
콜백과 템플릿 (역할 분담하고 있는 관계)
JdbcContext나 JdbcTemplate이 사용하는 콜백 오브젝트는 ResultSet이나 PreparedStatement를 이용해서 작업하다 발생하는 SQLException을 자신이 처리하지 않고 템플릿으로 던져버린다.

예외처리는 콜백 오브젝트의 역할이 아니라고 보고 SQLException에 대한 예외를 회피한 후 템플릿 레벨에서 처리하도록 던진다.

예외 전환

예외 회피와 비슷하게 메소드 밖으로 던지는 방법.
하지만 다른점은 적절한 예외로 변경하여 던진다.
보통 전환하는 예외에 원래 발생한 예외를 담아서 중첩 예외(nested exception)으로 만드는 것이 좋다.

catch(SQLException e){
        . . . 
        throw DuplicateUserIdException(e);
}

던져진 예외가 예외상황에 적절한 의미를 부여해주지 못하는 경우

  • 의미를 분명하게 해줄 수 있는 예외로 바꿔주기 위해 상황에 알맞은 의미를 가진 예외로 변경한다.

    example )
    중복된 아이디로 사용자 등록 시 DB에러로 SQLException 발생했을 때 DAO에서 이 예외를 그대로 던지면 서비스 계층에서는 예외 발생 원인을 모른다.

처리하기 쉽고 단순하게 만들기 위해 포장하는 경우

  • 중첩 예외를 이용해 새로운 예외 만들고 원인이 되는 예외를 내부에 담아 던지진다.
    (Checked Exception-> Unchecked Exception)
  • 불필요한 catch/throws를 줄여주어 코드의 가독성을 높인다.

    example )
    EJBException
    EJB 컴포넌트 코드에서 발생하는 대부분의 체크 예외는 비즈니스 로직에서는 의미없는 예외이거나 복구 불능한 예외이다.
    런타임 예외인 EJBException으로 포장해서 던져야한다.

profile
hello human

0개의 댓글