Optional orElse Vs orElseGet 비교

God Beom·2024년 1월 5일

TL;DR

  • orElse :
    1. orElse함수 호출 전 파리미터 other 실행
    2. orElse호출
    3. T value null 체크 후 value 또는 other 반환
  • orElseGet :
    1. orElseGet함수 호출 전 파라미터 other(Supplier<.T>) 객체 생성(호출 보류).
    2. orElseGet호출
    3. T value null 체크 후 value 또는 other.get() 호출 여부 결정

Optional 코드

public final class Optional<T> {

    ... // 생략

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

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

검증

public void findUserEmailOrElse() {
    String userEmail = "Empty";
    String result = Optional.ofNullable(userEmail)
    	.orElse(getUserEmail());
        
    System.out.println(result);
}

public void findUserEmailOrElseGet() {
    String userEmail = "Empty";
    String result = Optional.ofNullable(userEmail)
    	.orElseGet(this::getUserEmail);
        
    System.out.println(result);
}

private String getUserEmail() {
    System.out.println("getUserEmail 호출");
    return "mangkyu@tistory.com";
}

결과

// 1. orElse인 경우
getUserEmail 호출
Empty

// 2. orElseGet인 경우
Empty
profile
의미있는10%코드를 위하여

0개의 댓글