본문 바로가기
프로그래밍 놀이터/디자인 패턴, 리펙토링

[Effective Java] 매개 변수가 유효한지 검사하기.

by 돼지왕 왕돼지 2017. 1. 9.
반응형

 [Effective Java] 매개 변수가 유효한지 검사하기.


@throws, assertion, Effective JAVA, exception translation, failure atomicity, IllegalArgumentException, indexoutofboundsexception, javadoc, NullPointerException, Public, public 메소드, [Effective Java] 매개 변수가 유효한지 검사하기., 객체 생성, 검사, 매개 변수, 매개변수, 메소드, 메소드 매개 변수, 메소드 실행, 명시적 검사, 몸체 코드, 묵시적, 문사회된 예외, 문서화, 불변 규칙, 비실용적, 사전 검사, 생성자, 생성자 매개 변수, 수행, 습관, 실패 원자성, 심사 숙고, 에러, 에러 검출, 예외, 예외 변환, 위반, 유념, 유효, 유효성 검사, 유효성 검사 비용, 이디엄, 일반적 원칙, 자연 발생, 자연히 발생하는 예외, 잘못된 예외, 제약, 제한, 직접 제어, 클라이언트, 태그, 호출 상황

-
대부분의 메소드와 생성자는 자신들의 매개 변수로 전달될 수 있는 값에 제한을 둔다.
그런 모든 제약은 명확하게 문서화해야 하며, 메소드 몸체 코드의 맨 앞에서 검사하도록 해야 한다.
이것은 에러가 발생한 후 가능한 빨리 검출해야 한다는 일반적 원칙의 특별한 경우이다.
만일 사전 검사에 실패하면 에러의 검출이 불확실하게 되고, 에러가 생긴 소스 코드를 찾기가 더욱 어려워진다.


-
public 메소드의 경우는 javadoc 의 @throws 태그를 사용해서 매개 변수 값의 제약을 위반했을 때 발생되는 예외를 문서화한다.
일반적으로 IllegalArgumentException, IndexOutOfBoundsException, NullPointerException 예외가 될 것이다.


-
public 이 아닌 경우에는 메소드 호출 상황을 직접 제어할 수 있어,
Assertion 을 사용해서 매개 변수를 검사해야 한다.
Assertion 은 클라이언트가 어떻게 사용하는지와 관계없이 지정한 조건이 true 일 것이라고 단언하는 것이다.


-
자신이 속한 클래스의 불변 규칙을 위반하는 객체의 생성을 막기 위해 생성자 매개 변수의 유효성 검사는 매우 중요하다.


-
메소드의 매개 변수는 메소드가 실행되기 전에 검사해야 한다는 규칙에 예외가 있을 수 있다.
그 중 중요한 것으로는 유효성 검사에 비용이 많이 들거나 비실용적이며, 유효성검사가 메소드 실행 중에 묵시적으로 수행되는 경우이다.
그러나 묵시적인 유효성 검사를 무분별하게 신뢰하면, 실패 원자성(failure atomicity)를 잃을 수 있다는 점을 유념해야 한다.


-
유효성 검사를 묵시적으로 수행할 때 잘못된 예외가 발생하는 경우가 종종 있다..
해당 메소드의 매개 변수 값이 부적합해서 자연히 발생하는 예외가 그 메소드의 문서화된 예외와 일치하지 않게 된다.
이 경우에는 에외 변환(exception translation) 이디엄을 사용해서 자연히 발생한 예외를 올바른 것으로 변환해야 한다.



Summary


메소드나 생성자를 작성할 때마다 매개 변수에 어떤 제약을 둘 것인지 심사 숙고해야 한다.
그리고 그런 제약을 문서화하고 메소드 몸체의 맨 앞에서 명시적인 검사를 하도록 해야 한다.
또 그렇게 습관 들이는 것이 좋다.





반응형

댓글