메서드.

메서드(생성자 포함)의 매개변수, 반환값 처리와 시그니처 설계, 문서화 방법을 사용성, 견고성, 유연성에 집중해 설명합니다.

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

this.strategy = Objects.requireNonNull(strategy, "전략");

아이템 50. 적시에 방어적 복사본을 만들라

Date start = new Date();
Date end = new Date();
Period p = new Period(start, end);
end.setYear(78);

아이템 51. 메서드 시그니처를 신중히 설계하라

API 설계 요령사항

과하게 긴 매개변수 목록을 짧게 줄여주는 기술 세 가지

  1. 여러 메서드로 쪼갬
  1. 매개변수 여러개를 묶어주는 도우미 클래스를 만드는것
  2. 빌더 패턴(아이템2)를 사용

아이템 52. 다중정의는 신중히 사용하라

public class CollectionClassifier {
  public static String classify(Set<?> s) {
    return "집합";
  }
  public static String classify(List<?> lst) {
    return "리스트";
  }
  public static String classify(Collection<?> c) {
    return "그 외";
  }
  public static void main(String[] args) {
    Collection<?>[] collections = {
      new HashSet<String>(),
      new ArrayList<BigInteger>(),
      new HashMap<String, String>().values()
    };

    for (Collection<?> c: collections)
      System.out.println(classify(c));
  }
}

아이템 53. 가변인수는 신중히 사용하

static int sum(int... args) {
  int sum = 0;
  for (int arg: args)
    sum += arg;
  return sum;
}
public void foo() {}
public void foo(int a1) {}
public void foo(int a1, int a2) {}
public void foo(int a1, int a2, int a3) {}
public void foo(int a1, int a2, int a3, int... rest) {}

아이템 54. null이 아닌, 빈 컬렉션이나 배열을 반환하라

public Cheese[] getCheese() {
  return cheeseInStock.toArray(new Cheese[0]);
}

아이템 55. 옵셔널 반환은 신중히 하라

Optional 생성

public static <E extends Comparable<E>> Optional<E> max(Collection<E> c) {
  if (c.isEmpty())
    return Optional.empty();

  E result = null;
  for (E e : c) {
    if (result == null || e.compareTo(result) > 0)
      result = Objects.requireNonNull(e);
  }
  return Optional.of(result);
}

Optional 소비

// null일 경우 기본값을 지정가능
String lastWordInLexicon = max(words).orElse("단어 없음...");

// 값이 없을 시 원하는 예외를 던질 수 있음
Toy myToy = max(toys).orElseThrow(TemperTantrumException::new);

// 항상 그값이 채워져 있다고 가정, 없으면 예외(NoSuchElementException)
Element lastNobleGas = max(Elements.NOBLE_GASES).get();

아이템 56. 공개된 API 요소에는 항상 문서화 주석을 작성하라