JAVA/Effective Java

메서드- 규칙 38 인자의 유효성을 검사하라.

반응형

만약 메서드에서 파라미터 값으로 전달되는 값을 제한해야 하는 경우 어떤 값이 들어오면 시스템이 죽거나, 잘못된 데이터가 나온다는 것을 기재해 놓아야 한다.

그렇지 않으면 심각한 문제가 발생될 수 있다.

그렇기 때문에 몇 가지 안전장치를 마련해야 한다.

방법
- 만약 인자 유효성을 위반하는 경우는 Javadoc의 @throw 태그를 사용하여 문서화 해야 한다.



1
2
3
4
5
6
7
/**
 * 
 * @throw ZeroDivisionException (0으로 나누었을 때)
*/
public int getData() {
  return 222/0;
}
cs



- assertion을 이용하여 인자 유효성 체크할 수 있다.
- assertion은 항상 참이 되어야 한다. 만족되지 못하면 AssertionError가 발생된다.


1
2
3
private void sort(int a) {
  assert a == 0;
}
cs



- 생성자에 전달되는 인자값은 나중에 사용되는 경우가 많기 때문에 무조건 유효성 검사를 진행해야 한다.
- 메서드 실행 시 발생되는 예외가 문서와 다를 경우 문서에 명시된 예외로 예외 변환 숙어를 사용해서 메서드 문서에 명시된 예외로 변환해야 한다.


정리
 메서드, 생성자 등 사용되는 인자에 대한 유효성 검사를 진행해야 한다. 문서에 유효성 검사에 대한 내용을 기재해야 하며, 유효성 검사 도중 발생하는 예외에 대해 @throw 영역에 잘 기재해야 한다. 하지만 무조건 적인 인자 검사는 오버헤드를 발생 시킬 수도 있기에, 애초에 매서드는 필요한 메서드만 적절하게 받을 수 있도록 설계되어야 한다.

출처 : 조슈아 블로크, 『 Effective Java 2/E』, 이병준 옮김, 인사이트(2014.9.1), 규칙38 인용.

반응형