item 49) 매개변수가 유효한지 검사하라

  • 오류는 가능한 한 빨리 잡는 게 좋으므로 매개변수의 유효성부터 검사하면 좋다.

메서드의 매개변수 문서화

  • public과 protected 메서드는 매개변수 값이 잘못됐을 때 던지는 예외를 문서화해야 한다.

  • @throws 자바독 태그를 사용하여 예외를 문서화할 수 있다.

  • 보통 던지는 예외는 IllegalArgumentException,IndexOutOfBoundsException, NullPointerException 중 하나이다.

매개변수 문서화 방법

  • 클래스 수준 주석: 클래스의 모든 public 메서드에 적용되므로, 각 메서드에 일일이 기술하는 것보다 훨씬 깔끔하다.

  • @Nullable등의 어노테이션: 특정 매개변수는 null이 될 수 있다고 알려줄 수도 있지만, 표준적인 방법은 아니다.

  • requireNonNull 메서드: null 검사를 자동으로 해주어 유연하고 사용하기 편하다.

  • Objects에서 제공하는 범위 검사 기능(checkFromIndexSize, checkFromToIndex, checkIndex): 예외 메시지 지정이 불가하고, 리스트와 배열 전용이고, 닫힌 범위는 다루지 못한다는 한계가 있다.

  • assert(단언문): 단언한 조건이 참이 되어야 유효함이 확인된다. 실패하면 AssertionErorr를 던지며, 런타임에 아무런 영향도 주지 않는다.

주의점

  • 메서드가 직접 사용하진 않지만 나중에 쓰기 위해 저장하는 매개변수는 더 신경써서 검사해야 한다. 왜냐하면 추후 사용할 때에 NullPointerException이 발생하면 추적이 어렵기 때문이다.

  • 생성자 매개변수의 유효성 검사는 클래스 불변식을 어기는 객체가 생성되지 않도록 하는 데에 필수적이다.

  • 유효성 검사 비용이 높거나, 실용적이지 않거나, 메서드 수행 과정에서 암묵적으로 유효성 검사가 수행된다면, 메서드 몸체 실행 전 매개변수 유효성 검사가 필요 없다.

  • 하지만 암묵적 유효성 검사에 의존했다가는 실패 원자성을 해칠 수 있으니 주의해야 한다.(item76)

  • 발생한 예외와 API 문서에 기재된 예외가 다르다면, 예외 번역 관용구를 사용해 API 문서에 기재된 예외로 번역해줘야 한다.(item73)

Last updated