-
Couldn't load subscription status.
- Fork 0
09. How Project Reactor adapts in RxJava
이번에는 Reactive Streams를 구현하는 라이브러리간의 Publisher 상호변환에 대해 알아볼 것입니다.
우리가 지금 공부하고 있는 Project Reactor 라이브러리는 Publisher의 구현체로 Flux와 Mono를 지원합니다.
마찬가지로 RxJava에서는 Flux와 대응되는 Observable과 Flowable을 지원하고
Mono와 대응되는 Single을 지원합니다.
모두 Reactive Streams라는 명세서를 바탕으로 만들어진 라이브러리이기 때문에 서로 상호변환이 가능합니다.
// Observable -> Flux
Flux.from(Observable.just("apple", "banana", "grape").toFlowable(BackpressureStrategy.BUFFER));
// Flux -> Observable
Observable.fromPublisher(Flux.just("apple", "banana", "grape"));
// Flowable -> Flux
Flux.from(Flowable.just("apple", "banana", "grape"));
// Flux -> Flowable
Flowable.fromPublisher(Flux.just("apple", "banana", "grape"));
// Single -> Mono
Mono.from(Single.just("apple").toFlowable());
// Mono -> Single
Single.fromPublisher(Mono.just("apple"));Flowable을 Flux로
Flux를 Flowable로
Observable을 Flux로
Flux를 Observable로
Single을 Mono로
Mono를 Single로
Flowable은Publisher인터페이스를 구현한 반면에,
Observable과Single은Publisher가 아닌...Source를 구현한 것을 알 수 있습니다.
그래서 상호변환하면서Flowable로 변환 뒤 변환하는 두 번의 변환 과정을 거쳐야 한다는 것을 알 수 있는데,
RxJava측에서는 왜Publisher를 구현하지 않았는지 모르겠습니다.또한
Flux처럼 여러 개의 데이터를 담고 있는Publisher가
RxJava에는Flowable과Observable로 나누어지는데,
이는 데이터의 양과 사용되는 출처에 따라 나뉜다고 합니다.
정확한 정보는 나중에RxJava에 대해 깊게 공부하면서 알아보도록 하겠습니다.
자바가 8버전에 이르면서 CompletableFuture라는 클래스가 추가되었습니다.
CompletableFuture는 자바에서 비동기 프로그래밍을 하기 위해서 추가된 것으로,
Project Reactor가 내부적으로 CompletableFuture로 구현되어 있습니다.
그래서 CompletableFuture와 Project Reactor의 Mono간의 상호변환이 가능합니다.
// CompletableFuture -> Mono
Mono.fromFuture(CompletableFuture.supplyAsync(() -> "apple"));
// Mono -> CompletableFuture
Mono.just("apple").toFuture();Flux는 안 되고 Mono만 가능한 것으로 보아 하나만 가질 수 있는 스트림을 모아서
Flux를 구현하지 않았을까라고 추측해봅니다.