•메서드와 생성자 대부분은 입력 매개변수의 값이 특정 조건을 만족하기를 바람.
•인덱스값은 음수이면 안되며, 객체 참조는 null이 아니어야 한다.
메서드 몸체가 실행되기전에 매개변수를 확인한다면 잘못된 값이 넘어왔을때 즉각적이고 깔끔한 방식으로 예외를 던질수 있다.
보통은 IlleaglArgumentException, IndexOutOfBoundsException, NullPointerException 중 하나이다.
2.매개변수의 제약을 문서화 한다면 그 제약을 어겼을 때 발생하는 예외도 함께 기술해야 한다.
public BigInteger mod(BigInteger m){
if(m.signum()<=0){
throw new ArithmeticException("계수(m)은 양수여야 합니다"+m);
}
//...계산 수행
}
이 메서드는 m이 null이면 m.signm() 호출 때 NullPointerException을 던진다.
자바의 null검사 기능 사용하기
this.strategy= Objects.requireNonNull(strategy,"전략");
반환값은 무시하고 필요한 곳 어디서든 순수한 null검사 목적으로 사용해도 된다.
4.public이 아닌 메서드라면 단언문을 사용해 매개변수 유효성을 검증할수 있다.
재귀 정렬용 private 도우미 함수
private static void sort(long a[], int offset, int length){
assert a !=null;
assert offset>=0 && offset <=a.length;
assert length >=0 && length <=a.length-offset;
}
이 코드의 핵심은 이 단언문들은 자신이 단언한 조건이 무조건 참이라고 선언한다는것
단언문은 몇가지 먄에서 일반적인 유효성 검사와 다르다
1) 실패하면 AssertionError를 던진다.
2) 런타임에 아무런 효과도, 아무런 성능 저하도 없다.
메서드가 직접 사용하지는 않으나 나중에 쓰기위해 저장하는 매개변수는 특히 더 신경써서 검사해야 한다,