Optional
Optional
정의
(제네릭) T 타입 객체의 Wrapper Class
public final class Optional<T> { private final T value; ... }
모든 종류의 객체 저장 가능
null도 저장 가능하지만 저장하지 않는 것이 좋음
애당초 Optional의 등장 계기가 null을 직접 다루는 것의 위험성(NullPointerException) 해결을 위함임
Optional을 통해 null을 간접적으로 다루기 위해 감쌈(Wrap)
내부적으로 조건문 포함하는 함수 지원해 if 없이 null 체크 가능
null일 가능성이 있는 변수마다 if로 체크하면 코드가 지저분해짐
기능
생성 메소드
Optional<T> of(T t)
,Optional<T> ofNullable(T t)
of는 전달값이 null이면
NullPointerException
발생Optional 자체가 null을 감싸기 위해 사용하는 것이므로 주로
ofNullable
사용이 바람직
Optional<T> Optional.empty()
Optional 내 value가 null인 Optional 객체 생성
조회 메소드
T get()
값 반환
value가 null이면 예외 발생
T orElse(T t)
값 반환
없으면 매개변수로 전달된 값 반환
T orElseGet(Supplier<T> s)
값 반환
없으면 전달된 람다식의 결과값 반환
T orElseThrow(Exception e)
값 반환
없으면 전달된 예외 발생
value의 null 여부에 따른 분기 메소드
boolean isPresent()
있으면 true, 없으면 false
void ifPresent(Consumer<T> c)
있으면 value에 전달된 람다식 적용
기본형 Optional
기본형 변수를 감싸는 Wrapper 클래스
public final class OptionalInt { private final boolean isPresent; private final int value; ... }
value는 최초로 0으로 초기화
value가 실제로 0일 때와 empty일 때를 구분하기 위해 isPresent라는 변수 존재
empty면 value == 0이고 isPresent == false
0이면 value == 0이고 isPresent == true
다음의 것들이 존재
OptionalInt
OptionalLong
OptionalDouble
Last updated