반응형
만약 메서드에서 파라미터 값으로 전달되는 값을 제한해야 하는 경우 어떤 값이 들어오면 시스템이 죽거나, 잘못된 데이터가 나온다는 것을 기재해 놓아야 한다.
그렇지 않으면 심각한 문제가 발생될 수 있다.
그렇기 때문에 몇 가지 안전장치를 마련해야 한다.
방법
- 만약 인자 유효성을 위반하는 경우는 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 인용.
반응형
'JAVA > Effective Java' 카테고리의 다른 글
메서드- 규칙 40 메서드 시그니처는 신중하게 설계하라. (0) | 2018.05.29 |
---|---|
메서드- 규칙 39 필요하다면 방어적 복사본을 만들라. (0) | 2018.05.29 |
어노테이션 - 규칙 37 자료형을 정의할 때 표식 인터페이스를 사용하라. (0) | 2018.05.29 |
어노테이션 - 규칙 36 Override 어노테이션은 일관되게 사용하라. (0) | 2018.05.29 |
Enum - 규칙 35 작명 패턴 대신 어노테이션을 사용하라. (0) | 2018.05.29 |