즉시 평가와 지연 평가는 fallback 실행 시점이 다르다

이미 값이 있어도 orElse의 인수 식은 먼저 계산되므로 비싼 작업과 side effect가 발생합니다.

orElse(value())

호출 전에 즉시 평가

orElseGet(() -> value())

empty일 때만 실행

orElseThrow(supplier)

empty일 때 예외 생성

핵심: 대체 계산이 필요할 때만 실행되어야 하면 Supplier 기반 API를 씁니다.