Optional 에는 orElse() 라는 메소드와 orElseGet() 이라는 메소드가 있다.
둘 다 Optional 을 통해 가져온 값이 null 일 때는 해당 값을 반환하라는 메소드다.
orElse 와 orElseGet
/**
* Return the value if present, otherwise return {@code other}.
*
* @param other the value to be returned if there is no value present, may
* be null
* @return the value, if present, otherwise {@code other}
*/
public T orElse(T other) {
return value != null ? value : other;
}
/**
* Return the value if present, otherwise invoke {@code other} and return
* the result of that invocation.
*
* @param other a {@code Supplier} whose result is returned if no value
* is present
* @return the value if present otherwise the result of {@code other.get()}
* @throws NullPointerException if value is not present and {@code other} is
* null
*/
public T orElseGet(Supplier<? extends T> other) {
return value != null ? value : other.get();
}
간단하게 보면 두 메소드 다 value 가 null 이면 other 을 return 하는 형태이다.
차이가 있다면 orElse() 의 경우에는 T 타입의 other 을 그대로 반환해주는 역할을 하고, orElseGet() 의 경우에는 Supplier 의 인터페이스를 통해 그 인터페이스의 결과(?) 를 반환한다고 볼 수 있습니다.
- orElse 메소드는 해당 값이 null 이든 아니든 관계없이 항상 불린다.
- orElseGet 메소드는 해당 값이 null 일 때만 불린다.
return value != null ? value : other; // orElse(T other)
return value != null ? value : other.get(); // orElseGet(Supplier<? extends T> other)
'JAVA > Chapter14' 카테고리의 다른 글
JAVA - Supplier (0) | 2022.09.08 |
---|---|
Java - 람다식에서 메서드 참조/생성자 참조 사용법 (0) | 2022.09.01 |
Java - ::(더블콜론) (0) | 2022.08.30 |
Java 입출력(I/O), 스트림(Stream), 버퍼(Buffer) 개념 및 사용법 (0) | 2022.08.25 |
OutputStream 정의 (0) | 2022.08.25 |