1. 예외를 처리하는 방법
※ 최근 자바 개발자들끼리 checked exception을 unchecked exception으로 전환시키는 것이 좋다는 결론을 내림
1) 예외 복구
// 일반적으로 예외를 던지는 경우
public void exceptionTest() throws SomeException {
}
// 어느정도 처리하고 예외를 던지는 경우
public void exceptionTest() throws SomeException {
try {
...
} catch (SomeException e) {
// 예외 처리의 필요성이 있을 때 어느정도 처리하고 던지는 경우
throw e;
}
}
- 예외 발생 시 다른 작업 흐름으로 유도 ( try ~ catch ~ finally )
- 예외가 발생해도 어플리케이션은 정상적인 흐름으로 진행됨
- 예외 발생 시 재시도를 통해 정상 흐름으로 진행되게 하거나 미리 예측하여 다른 흐름으로 유도시키도록 구현하면 예외가 발생하더라도 정상적으로 작업 종료 가능
2) 예외 처리 회피
public void exceptionTest() {
try {
...
} catch (SQLException e) {
// 더 명확하게 인지할 수 있도록 다른 예외로 전환해서 던지는 방법
throw new DuplicationUserIdException(message);
}
}
- 예외 처리를 직접 담당하지 않고 호출한 쪽으로 던져 회피하는 방법
- 무책임하게 상위 메서드로 throw를 던지는 행위는 상위 메서드의 책임이 증가하기 때문에 적절한 경우에만 사용하는 것이 좋음
3) 예외 전환
- 예외를 잡아 다른 적절한 예외로 전환하여 자신을 호출한 메서드로 던져버리는 방법
- 호출한 쪽에서 예외를 받아 처리 시 좀 더 명확하게 인지할 수 있도록 돕기 위한 방법
- 어쩔 수 없이 API에서 가져다 쓰는 기능(Thread.sleep() 등)은 checked exception이 강제되는 경우 어떤 로직을 호출하거나 실행하려 하는지 명시되는 문제가 발생
→ try ~ catch를 쓰되 catch 블럭에서 다른 runtimeException을 throw
→ 예외를 유발했던 요소가 아닌 catch 블럭에서 일으킨 예외가 대신 콘솔에 찍힘
→ throw 되는 예외를 바꿔서 어떤 로직이 예외를 유발했는지 추론하기 어렵게 만들어 캡슐화 유지