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