[Java] Item 49 : 매개변수가 유효한지 검사하라
Effective Java를 읽고 정리한 정리본입니다.
📌 Item 49 : 매개변수가 유효한지 검사하라
인덱스 값은 음수이면 안 되고, 객체 참조는 null이 아닌 식의 메서드와 생성자 대부분은 입력 매개변수의 값이 특정 조건을 만족하기를 바란다.
이런 제약은 반드시 문서화해야 하며, 메서드 몸체가 시작되기 전에 검사해야 한다.
이는 “오류는 가능한 한 빨리 잡아야 한다”는 일반 원칙의 사례이기도 하다.
오류를 발생한 즉시 잡지 못하면 해당 오류를 감지하기 어려워지고, 감지하더라도 오류의 발생 지점을 찾기 어려워진다.
🫧 매개변수 유효성 검사
따라서, 메서드 몸체가 실행되기 전에 매개변수를 확인한다면 잘못된 값이 넘어왔을 때 즉각적이고 깔끔한 방식으로 예외를 던질 수 있다.
✨ 매개변수 검사를 제대로 하지 못한 경우 발생하는 문제
- 메서드가 수행되는 중간에 모호한 예외를 던지며 실패할 수 있다.
즉, 매개변수 검사에 실패하면 실패 원자성을 어기는 결과를 낳을 수 있다.
🫧 매개변수 유효성 검사 시 지켜야 할 사항
- public과 protected 메서드는 매개변수 값이 잘못됐을 때 던지는 예외를 문서화해야 한다. (@throws 자바독 태그 사용)
- 보통 IllegalArgumentException, IndexOutOfBoundsException, NullPointerException 중 하나이다.
- 매개변수의 제약을 문서화한다면 그 제약을 어겼을 때 발생하는 예외도 함께 기술해야 한다.
- 다만, 관련된 설명을 모두 적을 필요는 없다. 클래스 수준에서 처리할 수 있는 예외이면 클래스 수준 주석으로 다는 것이 좋다.
✨ 매개변수 검사
- @Nullable 혹은 이와 비슷한 애너테이션 사용 (null 가능, 표준적 방법 X)
- java.util.Objects.requireNonNull
- 범위 검사 : checkFromIndexSize, checkFromToIndex, checkIndex
- public이 아닌 메서드라면 단언문 사용
또, 메서드가 직접 사용하지는 않으나 나중에 쓰기 위해 저장하는 매개변수는 특히 더 신경 써서 검사해야 한다.