Optional에서 orElse()와 orElseGet()의 차이

김승규·2022년 11월 2일
0

orElse()

값이 있으면 값을 반환하고, 그렇지 않으면 다른 값을 반환합니다.
매개 변수: other – 값이 없는 경우 반환되는 값입니다. null일 수 있습니다.
반환: 존재하는 경우 value, 아니면 other

public T orElse(T other) {
    return value != null ? value : other;
}

사용법

Optional<InputObject> inputObject;
return inputObject.map(obj -> obj.getReturn()).orElse(0);

orElseGet()

값이 있으면 값을 반환하고, 그렇지 않으면 공급 함수에 의해 생성된 결과를 반환합니다.
매개 변수: supplier – 반환할 값을 생성하는 공급 함수
반환: 존재하는 경우 value, 아니면 공급 함수에 의해 생성된 결과 값
던지기: NullPointerException – 값이 없고 공급 함수가 null인 경우

public T orElseGet(Supplier<? extends T> supplier) {
	return value != null ? value : supplier.get();
}

supplier : () -> {}

존재 여부에 따라 다른 값을 갖는 객체를 생성하여 반환하기

Optional<InputObject> inputObject;
return inputObject.map(obj -> new ReturnObject(obj.getReturn()).orElseGet(() -> new ReturnObject());

차이

  • orElse 메소드는 해당 값이 null이든 아니든 관계없이 항상 불립니다.
  • orElseGet 메소드는 해당 값이 null일 때만 불립니다.
profile
꿈꾸는 리얼리스트 개발자 김승규입니다.

0개의 댓글