티스토리 뷰

learning

Adapt (9/12)

눈침침 2021. 3. 24. 23:24

Tech.io의 'Reactive Programming with Reactor 3'을 공부하면서 정리하는 글입니다.


페이지 요약을 시작해보자,

  • RxJava3Reactor 3 타입은 별도의 라이브러리 없이 함께 사용할 수 있다.
  • 두 라이브러리 모두 어떤한 Publisher로 부터 인스턴스를 만들 수 있는 Factory 메서드를 제공하기 때문입니다.

서로 매칭되는 타입은 어떤게 있을까?
그리곡, 과연 사용할 일이 있을까?

Publisher: Flux: Flowable


연습문제

Q1. Flux to Flowable back to Flux

우선 JavaDoc 문서를 찾아놓자! Flowable (RxJava)

// TODO Adapt Flux to RxJava Flowable
Flowable<User> fromFluxToFlowable(Flux<User> flux) {
    return Flowable.ambArray(flux); // <- 잘못된 함수 선택
}

// TODO Adapt RxJava Flowable to Flux
Flux<User> fromFlowableToFlux(Flowable<User> flowable) {
    return Flux.from(flowable);
}

성공, 하지만, Flowable.ambArray()는 사실 Publisher 중 처음 데이터를 전달해주는 Publisher 만 구독하는 용도의 함수 였다.

실제로는 fromPublisher() 메서드를 사용하는게 본래 의도에 맞습니다.

// TODO Adapt Flux to RxJava Flowable
Flowable<User> fromFluxToFlowable(Flux<User> flux) {
    return Flowable.fromPublisher(flux);
}

Q2. Flux to Observable and back to Flux

// TODO Adapt Flux to RxJava Observable
Observable<User> fromFluxToObservable(Flux<User> flux) {
    return Observable.fromPublisher(flux);
}
  • ObservablePublisher 를 상속하는지 확인 -> X
  • ObservableFlowable 로 변경하는 메서드 확인 -> toFlowable(@NonNull BackpressureStrategy strategy) 발견
  • JavaDoc 에 BackpressureStrategy 가 잘 정리되어 있음, 나는 데이터 손실이 없어 보이는 BackpressureStrategy.BUFFER 를 선택
// TODO Adapt RxJava Observable to Flux
Flux<User> fromObservableToFlux(Observable<User> observable) {
    return Flux.fromPublisher(observable.toFlowable(BackpressureStrategy.BUFFER));
}

Q3 Mono to Single and back to Mono

관련있어 보이는 JavaDoc

// TODO Adapt Mono to RxJava Single
Single<User> fromMonoToSingle(Mono<User> mono) {
    return Single.from;
}

// TODO Adapt RxJava Single to Mono
Mono<User> fromSingleToMono(Single<User> single) {
    return Mono.from(single.toFlowable());
}

Q4 Mono to CompletableFuture and back to Mono

관련있어 보이는 JavaDoc

// TODO Adapt Mono to Java 8+ CompletableFuture
CompletableFuture<User> fromMonoToCompletableFuture(Mono<User> mono) {
    return mono.toFuture();
}
  • 역방향 역시 Mono API 를 살펴보자 -> toFuture()가 있어서 혹시나 하고 찾아보니 역시나 fromFuture()가 존재함을 발견!!
// TODO Adapt Java 8+ CompletableFuture to Mono
Mono<User> fromCompletableFutureToMono(CompletableFuture<User> future) {
    return Mono.fromFuture(future);
}

이렇게 9장 Adapt 완료.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/03   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함