switchIfEmpty 와 defaultIfEmpty 차이

Sihwan Kim·2024년 6월 5일

Reactive Programming

목록 보기
9/9

switchIfEmpty

데이터가 지나갈 때 빈값이 오면 다른 방출 값으로 대체해서 내보낸다.

코드 예제

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
}

defaultIfEmpty

데이터가 지나갈 때 빈값이 오면 다른 값으로 대체한다.

코드 예제

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가 들어갈 수 없다.

비교하자면 mapflatMap의 차이라고 생각하면 이해가 빨리되었다.

0개의 댓글