Item 55. Optional

μ˜΅μ…”λ„ λ°˜ν™˜μ€ μ‹ μ€‘νžˆ ν•˜λΌ

μžλ°”μ—μ„œλŠ” λ©”μ„œλ“œ κ²°κ³Ό 값을 λ°˜ν™˜ν•  수 없을 λ•Œ μ•„λž˜ μ„Έ κ°€μ§€ 선택지가 μ‘΄μž¬ν•œλ‹€.

  • μ˜ˆμ™Έ λ˜μ§€κΈ°

  • null λ°˜ν™˜

  • Optional λ°˜ν™˜

이 쀑 null을 λ°˜ν™˜ν•˜λŠ” 것이 κ°€μž₯ μœ μ—°ν•˜κ³  μ‚¬μš©ν•˜κΈ° μ‰¬μš°λ©°, null λ°˜ν™˜ λ©”μ„œλ“œλ³΄λ‹€ 였λ₯˜ κ°€λŠ₯성이 적닀. λ§Œμ•½ Optional λ°˜ν™˜μ„ μ‚¬μš©ν•œλ‹€κ³  ν–ˆμ„ 땐 μ ˆλŒ€ null을 λ°˜ν™˜ν•˜μ§€ 말아야 ν•œλ‹€.(Optional μ •μ±… μœ„λ°˜) λ°˜ν™˜κ°’μ΄ 없을 수 있으며, ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ 이λ₯Ό λͺ…ν™•ν•˜κ²Œ μ•Œλ €μ€˜μ•Ό ν•  λ•Œ Optional을 λ°˜ν™˜ν•˜λŠ” 것이 μ’‹λ‹€.

class Example {
    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 λ°˜ν™˜μ˜ 단점

λ§Žμ€ 이점을 μ£ΌλŠ” Optionalμ΄μ§€λ§Œ μ»¬λ ‰μ…˜, λ§΅, 슀트림, λ°°μ—΄, μ˜΅μ…”λ„ 같은 μ»¨ν…Œμ΄λ„ˆ νƒ€μž…μ—λŠ” Optional을 λ°˜ν™˜ν•˜λŠ” 것이 μ ν•©ν•˜μ§€ μ•Šλ‹€.

  • μ»¬λ ‰μ…˜ / λ°°μ—΄: μ»¬λ ‰μ…˜κ³Ό 배열은 이미 빈 μ»¬λ ‰μ…˜κ³Ό 배열을 λ°˜ν™˜ν•  수 있기 λ•Œλ¬Έμ— Optional을 λ°˜ν™˜ν•  ν•„μš”κ°€ μ—†λ‹€.

  • λ§΅: ν‚€κ°€ μ—†λ‹€λŠ” 사싀이 두 κ°€μ§€ λ°©μ‹μœΌλ‘œ ν‘œν˜„λ˜κΈ° λ•Œλ¬Έμ— ν˜Όλž€μ„ 쀄 수 μžˆλ‹€.

  • κ·Έ μ™Έ: μ„±λŠ₯에 λ―Όκ°ν•œ μƒν™©μ—μ„œλŠ” Optional을 λ°˜ν™˜ν•˜λŠ” 것이 μ ν•©ν•˜μ§€ μ•Šλ‹€.

Last updated