매개변수가 유효한지 검사하자
오류는 가능한 빨리 잡아내는 것이 좋다.
초반에 오류를 잡아내지 못한 상태로 코드가 수행되면 오류의 발생 지점을 점점 찾기 어려워지기 때문이다.
매개변수를 검사하는 예시
public BigInteger mod(BigInteger m) {
if (m.signum() <= 0) {
throw new ArithmeticException("m은 양수여야 합니다.");
}
...
}
- m이 0보다 작거나 같으면 ArithmeticException 예외 발생
- m이 null이면 NullPointerException 예외 발생
위 ArithmeticException 처럼 메서드에 정의되어 있지 않은데도 NPE 예외가 발생되는 이유는 BigInteger 클래스 수준에서 기술되어 있기 때문이다.
java.util.Objects.requireNonNull 메서드
null을 수동으로 검사하지않고 유연하고 편하게 검사하는 방법
this.strategy = Objects.requireNonNull(strategy, "전략");
requireNonNull은 null이 아닌 경우 입력을 그대로 반환하므로 순수한 null 검사 목적으로만 사용 가능하다.
null이 아닌, 빈 컬렉션이나 배열을 반환하자
빈 컨테이너를 할당하는 데 비용이 들기 때문에 null을 반환하는게 낫지 않을까?
- 빈 컨테이너를 할당하는 것이나 null을 반환하는 것이나 성능 차이가 미미하다.
- 빈 컬렉션과 배열은 새로 할당하지 않아도 반환가능하다.
- 컬렉션이 비어있을 때 null을 반환한게 되면, 이 null 상황을 처리하고자 코드를 추가적으로 작성(오류 처리 고드)해주어야 한다.