Skip to content

Latest commit

 

History

History
68 lines (41 loc) · 2.37 KB

File metadata and controls

68 lines (41 loc) · 2.37 KB

Item 38 : 인자의 유효성을 검사하라



요약

메소드생성자 를 구현할 때는 받을 수 있는 인자에 제한이 있는지 따져봐야 한다. 제한이 있다면 그 사실을 문서에 남기고, 메소드 앞부분에서 검사하도록 해야 한다.




메소드

index 값은 음수가 될 수 없다

객체 참조는 null 이 될 수 없다

라는 등의 규칙이 필요한 것이 인자로 올 수 있다.

알고리즘 문제풀 때는 예외가 안들어 오기 때문에 이런 코드를 짜지 않았지만,

실제로는 인자가 유효한 값이 들어왔는지 체크를 해줘야 한다.

( 예외 : 유효성 검사 오버헤드가 크다 / 비현실적이다 / 계산 과정에서 자동으로 이루어진다)

그 시기는 제일 앞단이다.

이 처리를 안해주면 생기는 문제점

  1. 예외를 내면서 프로그램이 죽는다

  2. 잘못된 결과가 나온다.

  3. 실행은 되는데 사이드이펙트 발생

public 메소드 일 경우 유효성 위반인 경우 발생하는 예외는 @throws 를 사용해서 문서화하라 (규칙 62)

인자 유효성에 관계된 조건. 유효성 위반 시에 발생하는 예외 까지 문서로 남겼다면, 유효성을 검사하는 코드를 만드는 것은 간단하다.

public 메소드 가 아닐 경우, 개발자가 메서드 호출을 통제할 수 있으므로 항상 유효한 인자가 전달될 것으로 예상할 수 있다. 따라서, public이 아닌 메소드 는 일반적으로 인자 유효성을 검사할 때 assertion 을 이용한다.

//재귀적으로 정렬하는 private 도움 함수
private static void sort(long a[], int offset, int length) {
  assert a != null;
  assert offset >= 0 && offset <= a.length;
  assert length >= 0 && length <= a.length - offset;
  ... //계산 수행
}

assertion 은 그냥 실행되는 것이 아니라,

활성화 시키려면 java 인터프리터에 -ea(enableassertions) 옵션을 주어야 한다

assertion 은 조건 불만족시 AssertionError를 낸다.

     

생성자

생성자는 나중을 위해 보관될 인자의 유효성을 반드시 검사해야 한다

클래스 불변식을 위반하는 객체가 만들어지는 것을 막으려면, 생성자에 전달되는 인자의 유효성을 반드시 검사해야 한다.