orElse와 orElseGet은 fallback 계산 시점이 다르다

결과 값만 보면 같아도 present일 때 fallback 함수가 호출되는지는 다릅니다.

orElse(create())

호출 전에 항상 create 실행

orElseGet(this::create)

empty일 때만 실행

present 결과

둘 다 기존 값 반환

핵심: 비싼 계산과 side effect는 orElseGet에 넣습니다.