Optional — 값이 있을 수도 없을 수도 있는 컨테이너

Optional — 값이 있을 수도 없을 수도 있는 컨테이너

Optional<T>null이 아닌 값을 포함하거나 포함하지 않을 수 있는 컨테이너 객체예요. 값이 있으면 isPresent()true를, 없으면 값이 없는 것으로 간주해 false를 반환해요. 값의 존재 여부에 의존하는 추가 메서드로 orElse()(값이 없으면 기본값 반환), ifPresent()(값이 있으면 동작 수행) 등이 제공돼요.

출처: Java API Reference

본문

public final class Optional<T> extends Object

Optional은 값 기반(value-based) 클래스예요. 같다고 판정되는 인스턴스는 상호 교환 가능하게 다뤄야 하고 동기화에 사용하면 안 돼요. NPE를 직접 피하기보다 값의 부재를 타입으로 표현하도록 도와요.

팩토리

  • empty() — 값이 없는 빈 Optional을 반환해요.
  • of(T value) — 주어진 null이 아닌 값을 가진 Optional을 반환해요(null이면 NPE).
  • ofNullable(T value) — 값이 null이 아니면 그 값을, null이면 빈 Optional을 반환해요.

조회

  • get() — 값이 있으면 반환하고, 없으면 NoSuchElementException을 던져요.
  • isPresent() / isEmpty() — 값 존재/부재 여부를 반환해요.

처리

  • ifPresent(Consumer) — 값이 있으면 동작을 수행해요.
  • ifPresentOrElse(Consumer, Runnable) — 값이 있으면 첫 동작, 없으면 빈 기반 동작을 수행해요.
  • filter(Predicate) — 값이 있고 술어를 만족하면 값의 Optional, 아니면 빈 Optional을 반환해요.
  • map(Function) — 값이 있으면 매핑 함수 결과의 Optional을 반환해요. 결과가 null이면 빈 Optional이에요.
  • flatMap(Function) — 매핑 함수 결과가 이미 Optional일 때, 추가로 감싸지 않고 반환해요.
  • or(Supplier) — 값이 있으면 값의 Optional, 없으면 공급 함수가 만든 Optional을 반환해요.
  • stream() — 값이 있으면 그 값만 담은 순차 스트림, 없으면 빈 스트림을 반환해요.

값 얻기

  • orElse(T other) — 값이 있으면 그 값, 없으면 other를 반환해요.
  • orElseGet(Supplier) — 값이 없으면 공급 함수가 만든 값을 반환해요.
  • orElseThrow() — 값이 없으면 NoSuchElementException을 던져요.
  • orElseThrow(Supplier) — 값이 없으면 공급 함수가 만든 예외를 던져요.

기타

equals(Object)는 둘 다 값이 없거나 값들이 equals()로 같은 Optional끼리 true를 반환해요. hashCode()는 값의 해시코드(없으면 0)를 반환해요. toString()은 디버깅용 문자열을 반환해요.

더 알아보기 (Learn more)