Java8 ~
Optional (Java SE 10 & JDK 10 )
null을 포함할 수도, null이 아닌 값을 포함할 수도 있는 컨테이너 객체
Optional은 주로 메서드의 반환으로 사용하기 위한 것으로, “결과 없음”을 명확하게 나타낼 필요가 있고 null을 사용하면 오류가 발생할 가능성이 있는 경우 사용한다.
→ 메서드 파라미터로 사용 X : 가독성 저하, Optional이 null인지 검사해야 함
→ 멤버로 사용 X : Serializeable 구현되지 않음 (바이트스트림으로 변환 / 저장 불가능)
Optional 타입 자체가 null이 되어선 안된다. 항상 Optional 인스턴스를 가리켜야 한다.
Optional<Object> = null // X
Optional
클래스 주요 메서드
static Optional | empty() | 비어 있는 Optional 인스턴스를 반환한다. |
---|---|---|
static Optional | of(T value) | null이 아닌 값을 포함하는 Optional 을 반환한다. |
static Optional | ofNullable(T value) | 지정된 값이 null이 아니면 해당 값을 포함하는 Optional 을, null이면 비어 있는 Optional 을 반환한다. |
T | get() | 값이 존재하면 해당 값을 반환하고, 없으면 NoSuchElementException 을 발생시킨다. |
boolean | isPresent() | 값이 존재하면 true , 없으면 false 를 반환한다. |
void | ifPresent(Consumer<? super T> consumer) | 값이 존재하면 주어진 동작을 수행하고, 없으면 아무 작업도 하지 않는다. |
Optional | filter(Predicate<? super T> predicate) | 값이 존재하고 주어진 조건을 만족하면 그 값을 포함하는 Optional 을 반환하고, 그렇지 않으면 비어 있는 Optional 을 반환한다. |
Optional | map(Function<? super T,? extends U> mapper) | 값이 존재하면 주어진 함수 적용 결과를 포함하는 Optional 을 반환하고, 없으면 비어 있는 Optional 을 반환한다. |
Optional | flatMap(Function<? super T,Optional> mapper) | 값이 존재하면 주어진 함수 적용 결과(Optional )를 반환하고, 없으면 비어 있는 ptional 을 반환한다. |
T | orElse(T other) | 값이 존재하면 그 값을 반환하고, 없으면 주어진 기본값을 반환한다. |
T | orElseGet(Supplier<? extends T> other) | 값이 존재하면 그 값을 반환하고, 없으면 주어진 공급자를 통해 생성된 값을 반환한다. |
T | orElseThrow(Supplier<? extends X> exceptionSupplier) | 값이 존재하면 그 값을 반환하고, 없으면 주어진 예외를 발생시킨다. |
boolean | equals(Object obj) | 다른 객체와 이 Optional 이 "같은지"를 확인한다. (Optional 끼리의 내부 값 비교) |
int | hashCode() | 값이 존재하면 그 값의 해시 코드를 반환하고, 없으면 0을 반환한다. |
String | toString() | 이 Optional 의 문자열 표현을 반환한다. |
OrElse / OrElseGet
두 메서드 중 언제 어떤 메서드를 사용해야 할지
[Java] Optional이란? Optional 개념 및 사용법 - (1/2)
Optional 주의사항 + Stream 처럼 사용하기
이렇게 사용하지 말자 / 이렇게 사용하자 / 이렇게도 사용할 수 있다