Growth-Collectors / effective-java

repository for effective java study
3 stars 2 forks source link

아이템 49. 매개변수가 유효한지 검사하라 #49

Open HanaHww2 opened 1 year ago

yeGenieee commented 1 year ago

아이템 49. 매개변수가 유효한지 검사하라

매개변수 검사를 제대로 하지 못하면 발생하는 문제

  1. 메서드가 수행 중간에 모호한 예외를 던지며 실패할 수 있다
  2. 메서드가 잘 수행되지만 잘못된 결과를 반환할 수 있다
  3. 메서드는 문제 없이 수행되었지만, 미래의 알 수 없는 시점에 메서드와 관련 없는 오류를 낼 수 있다
    • 오류를 발생한 즉시 잡지 못하면, 해당 오류를 감지하기 어렵다

public과 protected 메서드는 예외를 문서화하자

Java 7에 추가된 java.util.Objects.requireNonNull 메서드

공개되지 않은 (public 이 아닌) 메서드라면 단언문 (assert)을 사용하여 매개변수 유효성을 검증할 수 있다

메서드가 직접 사용하지는 않는데, 나중에 사용하기 위해 저장하는 매개변수

// int 배열의 List 뷰를 반환하는 정적 팩터리 메서드
static List<Integer> intArrayAsList(int[] a){
    Objects.requireNonNull(a); // null 검사

    return new AbstractList<Integer>() {
        @Override
        public Integer get(int index) {
            return a[index]; // 0x124124 + index
        }

        @Override
        public int size() {
            return a.length;
        }
    };
}

메서드 실행 전 매개변수 검사 예외의 경우

YunDaHyee commented 1 year ago

public, protected는 예외를 문서화하고 private 매개변수의 유효성 검증에는 assert를 사용해봐야겠습니다.

jioome commented 1 year ago

공개되지 않은 매개변수 유효성 검증은 assert를 사용해야 하군요