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