-
Notifications
You must be signed in to change notification settings - 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
를 구현하지 않았을까라고 추측해봅니다.