[책리뷰/Effective Java] 예외

OCTOBER 12, 2020

아이템72) 표준 예외를 사용하라

상황에 부합한다면 항상 표준 예외를 사용하자
더 많은 정보를 제공하길 원한다면 표준 예외를 확장해도 좋지만, 예외는 직렬화 할 수 있다는 사실을 기억하자

Exception, RuntimeException, Throwable, Error 는 직접 재사용하지 말자

  • 이 예외들은 다른 예외들의 상위 클래스이므로 안정적으로 테스트가 불가능하다.

흔하게 재사용되는 예외

예외 주요쓰임
IllegalArgumentException 허용하지 않는 값이 인수로 건네졌을 때(null은 따로 NullPointerException으로 처리)
IllegalStateException args가 무엇이든 객체가 메서드를 수행하기에 적절하지 않은 상태일 때
NullPointerException null을 허용하지 않는 메서드에 null을 건넸을 때
IndexOutOfBoundsException 인덱스가 범위를 넘어섰을 때
ConcurrentModificationException 허용하지 않는 동시 수정이 발견됐을 때
UnSupportedOperationException 호출한 메서드를 지원하지 않을 때

java exceptions handling mechanism

Best Practices for Custom Exceptions

  1. Always Provide a Benefit
    — 자바의 표준 예외들에 포함되지 않는 정보나 기능을 제공하지 않는 한 표준 예외를 사용하라
  2. Follow the Naming Convention
    — 표준 예외 클래스는 모두 Exception 으로 끝난다
  3. Provide Javadoc Comments for Your Exception Class
    — Javadoc은 예외가 발생할 수도 있는 상황과 예외의 일반적인 의미를 기술한다.
    목적은 다른 개발자들이 여러분의 API를 이해하도록 하고 일반적인 에러상황들을 피하도록 돕는것이다
  4. Provide a Constructor That Sets the Cause
    — 커스텀 예외를 던지기 전에 표준예외을 캐치하는 케이스가 꽤 많다.
    보통 캐치된 예외에는 제품에 발생한 오류를 분석하는데 필요한 중요한 정보가 포함되어 있다.
public void wrapException(String input) throws MyBusinessException {
    try {
        // do something
    } catch (NumberFormatException e) { // set 'e (Throwable)'
        throw new MyBusinessException("A message that describes the error.", e, ErrorCode.INVALID_PORT_CONFIGURATION);
    }
}

ref) https://m.blog.naver.com/PostView.nhn?blogId=sthwin&logNo=221144722072&proxyReferer=https:%2F%2Fwww.google.com%2F


작업 기록 블로그