[Effective Java] 매개 변수가 유효한지 검사하기. |
-
대부분의 메소드와 생성자는 자신들의 매개 변수로 전달될 수 있는 값에 제한을 둔다.
그런 모든 제약은 명확하게 문서화해야 하며, 메소드 몸체 코드의 맨 앞에서 검사하도록 해야 한다.
이것은 에러가 발생한 후 가능한 빨리 검출해야 한다는 일반적 원칙의 특별한 경우이다.
만일 사전 검사에 실패하면 에러의 검출이 불확실하게 되고, 에러가 생긴 소스 코드를 찾기가 더욱 어려워진다.
-
public 메소드의 경우는 javadoc 의 @throws 태그를 사용해서 매개 변수 값의 제약을 위반했을 때 발생되는 예외를 문서화한다.
일반적으로 IllegalArgumentException, IndexOutOfBoundsException, NullPointerException 예외가 될 것이다.
-
public 이 아닌 경우에는 메소드 호출 상황을 직접 제어할 수 있어,
Assertion 을 사용해서 매개 변수를 검사해야 한다.
Assertion 은 클라이언트가 어떻게 사용하는지와 관계없이 지정한 조건이 true 일 것이라고 단언하는 것이다.
-
자신이 속한 클래스의 불변 규칙을 위반하는 객체의 생성을 막기 위해 생성자 매개 변수의 유효성 검사는 매우 중요하다.
-
메소드의 매개 변수는 메소드가 실행되기 전에 검사해야 한다는 규칙에 예외가 있을 수 있다.
그 중 중요한 것으로는 유효성 검사에 비용이 많이 들거나 비실용적이며, 유효성검사가 메소드 실행 중에 묵시적으로 수행되는 경우이다.
그러나 묵시적인 유효성 검사를 무분별하게 신뢰하면, 실패 원자성(failure atomicity)를 잃을 수 있다는 점을 유념해야 한다.
-
유효성 검사를 묵시적으로 수행할 때 잘못된 예외가 발생하는 경우가 종종 있다..
해당 메소드의 매개 변수 값이 부적합해서 자연히 발생하는 예외가 그 메소드의 문서화된 예외와 일치하지 않게 된다.
이 경우에는 에외 변환(exception translation) 이디엄을 사용해서 자연히 발생한 예외를 올바른 것으로 변환해야 한다.
Summary
메소드나 생성자를 작성할 때마다 매개 변수에 어떤 제약을 둘 것인지 심사 숙고해야 한다.
그리고 그런 제약을 문서화하고 메소드 몸체의 맨 앞에서 명시적인 검사를 하도록 해야 한다.
또 그렇게 습관 들이는 것이 좋다.
'프로그래밍 놀이터 > 디자인 패턴, 리펙토링' 카테고리의 다른 글
[Effective Java] 메소드 시그니처를 신중하게 설계하자. (0) | 2017.01.12 |
---|---|
[Effective Java] 필요하면 방어 복사본을 만들자. (2) | 2017.01.10 |
[Effective Java] 타입 정의는 표시 인터페이스를 사용하자. (0) | 2017.01.05 |
[Effective Java] Override 주석을 일관성 있게 사용하자. (0) | 2017.01.03 |
[Effective Java] 작명 패턴보다는 주석(annotation)을 사용하자. (0) | 2017.01.02 |
댓글