메서드가 특정 조건에서 값을 반환할 수 없을 때의 선택지 (자바 8 이전)

  1. 예외 던지기

  2. null 반환

자바 8 이후의 선택지 - Optional 반환

// 옵셔널을 사용하지 않았을 때
public static <E extends Comparable<E>> E max(Collection<E> c) {
    if (c.isEmpty()) {
        throw new IllegalArgumentException("빈 컬렉션");
    }        

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

// 옵셔널을 사용할 때
public static <E extends Comparable<E>>
        Optional<E> max(Collection<E> c) {
    if(c.isEmpty()){
	    return Optional.empty();
    }
    ...
    return Optional.of(result);
}

→ 빈 옵셔널은 Optional.empty()로, 값이 있으면 Optional.of(value)를 사용

옵셔널 활용

  1. orElse - 기본값 지정

    String lastWordInLexicon = max(words).orElse("단어 없음"); 
    
  2. orElseThrow - 원하는 예외 던질 수 있음

    Toy myTody = max(toys).orElseThrow(TemperTantrumException::new);
    
  3. get - 항상 값이 채워져 있다고 가정

    Element lastNobleGas = max(Elements.NOBEL_GASES).get();
    

    → 안전하지 않은 듯?

  4. orElseGet - 기본값을 설정하는 비용이 클 때

    opMember.orElseGet(MainRunner::getCommon)
    

    → 값이 필요할때 Supplier 를 사용하여 생성하므로 초기 설정 비용을 낮출 수 있음

  5. isPresent - 옵셔널이 채워져 있으면 true, 아니면 false 반환

    opMember.isPresent()
    

주의 사항