데이터가 지나갈 때 빈값이 오면 다른 방출 값으로 대체해서 내보낸다.
fun main() {
val sourceMono: Mono<String> = Mono.empty() // 빈 Mono
val resultMono: Mono<String> = sourceMono
.switchIfEmpty(Mono.just("default value"))
resultMono.subscribe { println(it) } // Output: Processed: default value
}
데이터가 지나갈 때 빈값이 오면 다른 값으로 대체한다.
fun main() {
val sourceMono: Mono<String> = Mono.empty() // 빈 Mono
val resultMono: Mono<String> = sourceMono
.defaultIfEmpty("default value")
resultMono.subscribe { println(it) } // Output: default value
}
얼핏보면 기본값을 지정해서 응답하는 동일한 동작을 하는 것 같지만 둘은 큰 차이점이 있다.
switchIfEmpty 는 대체 값으로 Publisher를 받는다. 그렇기 때문에 반환하는 내부로직이 리액터의 장점을 받을 수 있다. defaultIfEmpty는 그냥 반환값을 받기때문에 Publisher가 들어갈 수 없다.
비교하자면 map과 flatMap의 차이라고 생각하면 이해가 빨리되었다.