Java ‐ 매개변수가 유효한지 검사하라[Effective Java Item 49] - thought-corner/Backend-PlayGround GitHub Wiki
- 메서드와 생성자 대부분은 입력 매개변수의 값이 특정 조건을 만족하길 바란다.
- 예컨대 인덱스 값은 음수이면 안되며, 객체 참조는
null이 아니어야 하는 것이 있다.
- 이런 제약은 반드시 문서화를 해야 하며 메서드 몸체가 시작되기 전에 검사해야 한다.
- 오류는 가능한 한 빨리 잡아야 한다는 일반 원칙의 한 사례이기도 하다.
- 오류를 발생한 즉시 잡지 못하면 해당 오류는 감지하기 어려워지고, 감지하더라도 오류 발생 지점을 찾기 어려워진다.
- 매개변수의 제약을 문서화한다면 그 제약을 어겼을 때 발생하는 예외도 함께 기술해야 한다.
/**
* (현재 값 mod m) 값을 반환한다. 이 메서드는
* 항상 음이 아닌 BigInteger를 반환하다는 점에서 remainder 메서드와 다르다.
*
* @param m 계수(양수여야 한다.)
* @return 현재 값 mod m
* @throws ArithmeticException m이 0보다 작거나 같으면 발생한다.
*/
public BigInteger mod(BigInteger m) {
if (m.signum() <= 0) {
throw new ArithmeticException("계수(m)는 양수여야 합니다." + m);
// .. 계산 로직
}
- 자바 7에 추가된
java.util.Objects.requireNonNull 메서드는 유연하고 사용하기도 편하니, 더 이상 null 검사를 수동으로 하지 않아도 된다.
@ForceInline
public static <T> T requireNonNull(T obj) {
if (obj == null)
throw new NullPointerException();
return obj;
}