반응형
Effective Java의 72번째 항목으로 Exception
, RuntimeException
, Throwable
, Error
를 직접 재사용하지 말자는 내용이다. 이 예외들은 다른 예외들을 포괄하는 클래스이므로 안정적으로 테스트할 수 없다. 예외 처리 코드가 실제로 잡아야 할 구체적인 예외가 아닌 다른 예외도 함께 잡을 수 있기 때문이다.
class Calculator {
public static int add(final String text) {
if (!StringUtils.hasText(text)) {
throw new RuntimeException("Input text cannot be null or empty");
}
// do something...
}
}
구체적인 예외 클래스를 사용함으로써 코드의 가독성과 유지보수성이 높일 수 있다. 위 Calculator
클래스에서 RuntimeException
대신 IllegalArgumentException
을 사용했다. 이렇게 하면 예외 발생 시 "메서드에 전달된 인자가 유효하지 않다"는 구체적인 의미를 알 수 있게된다. 해당 메서드를 사용하는 개발자는 어떤 상황에서 예외가 발생하는지 명확하게 이해할 수 있다. 또 예외 처리 코드에서도 특정 예외만 정확하게 캐치할 수 있어 더 견고한 애플리케이션을 구축할 수 있다.
Exception 클래스의 API 문서를 참고해 그 예외가 어떤 상황에서 던져지는지 꼭 확인해야한다. RuntimeException 문서를 보면 다른 표준 예외들을 확인할 수 있다. 예외가 필요한 상황에서는 이름 뿐만 아니라 예외가 던져지는 맥락도 고려해서 사용하도록 한다.
반응형