Reactive Streams의 구성요소들과 RxJava의 구성요소들의 관계?
안녕하세요, 강의를 복습하면서 의문점이 생겨 질문드립니다
RxJava는 Reactive Streams의 인터페이스들을 구현한 구현체라고 소개가 되어있는데요,
Reactive Streams에서 제공하는 인터페이스 Publisher, Subscriber / RxJava에서 구성요소는 Observable, Observer(구독자) 등이 있는데
(Publisher - Observable) 관계와 (Subscriber - Observer)관계로 이어 서로 비교를 해볼 수 있지 않을까라는 생각이 들었습니다.
RxJava가 Reactive Streams의 인터페이스들을 구현했다고 했으니,
Observable의 코드만 살펴봐도 Publisher를 상속한 부분이 있는지 (당연히) 확인할 수는 없었고, 제가 찾아본 (Publisher - Observable) 간 차이점은 패키지 구분이라는 것만 확인할 수 있었습니다.
import io.reactivex.Observable;
import org.reactivestreams.Publisher;
서론이 길었는데요, RxJava와 Reactive Streams의 각각의 구성요소들 간 관계를 '기존 인터페이스의 구현체의 일부일 뿐이다'라고 간단하게 이해하고 넘어가면 되는 걸까요?
Answer 2
1
RxJava는 Reactive Streams 인터페이스를 구현한 구현체라고 말하는 의미는 그게 두가지입니다.
첫번째는 우리가 Java 코드에서 흔히 볼 수 있는 Interface를 코드로 구현한 클래스를 의미하는 것과
두번째는 인터페이스라는 의미가 명세라는 뜻이 있는데요. 정의해둔 명세에 맞게 구현을 한다는 의미가 있는데요.
RxJava는 이 두가지 의미 모두에 어느 정도 부합을 한다라고 보시면 되겠습니다.
첫번째 의미에 부합하는것은 RxJava의 Flowable 입니다. Flowable은 Reactive Streams에서 정의해둔 interface 들을 구현하는 구현체라고 볼 수 있구요.
두번째 의미에 부합하는 것이 바로 Observable입니다. Observable은 Reactive Streams에서 정의해둔 interface 들을 그대로 구현하지 않고, RxJava에서 독자적으로 만든 Publisher인데 Reactive Streams에서 정의한 interface를 구현하지는 않았지만 기본적인 메커니즘은 Reactive Streams에서 정의한 명세와 거의 동일하다고 보시면 되겠습니다.
제가 RxJava를 공부하면서 느꼈던것 중에 하나가 왜 굳이 이렇게 둘을 불편하게 나눠놨을까하는 것이었어요.
RxJava를 처음 만들면서 나름의 사정이 있었다는 생각이 들지만 아무튼 Reactive Streams의 표준에 더 부합하는것은 Flowable이라고 보시면 되겠습니다.
강의에서도 말씀을 드렸던것 같은데 강의에서 Flowable을 거의 사용하지 않은 이유는 RxJava의 기능을 설명하는데 배압을 적용하지 않은 예제가 대부분이다보니 익숙하지 않은 용어인 Flowable보다는 Observable을 사용하는게 더 낫겠다라는 생각이 들어서였어요.
아무튼 RxJava와는 달리 Reactor는 이런 헷갈림이 없으니 나중에 Reactor 학습하실 때 참고하시면 좋을 것 같네요.
Single과 관련해 여쭤보고 싶은 부분이 있습니다!
0
264
2
cold/hot publisher 예제 코드와 관련해 질문 드립니다.
0
363
1
CompletableObserver 클래스의 람다식 표현관련
0
297
1
1강에 예시로 보여주신 ToDoSample 코드에 관해 질문 드립니다!
0
356
1
데이터 결합 연산자 / merge 관련 질문
0
445
1
DROP 배압 전략에 관한 궁금증
0
300
2
map에서의 TimeUtil.sleep에 관한 궁금점
0
216
1
강의 내용을 정리해서 개인 블로그에 올려도 될까요?
0
562
2
TimeUtil.sleep 관련 질문
0
286
1
배압 전략 중에서 DROP 전략과 관련해서 질문 있습니다.
0
335
1
Error 발생 시에도 계속 처리 방법
0
689
2
선언형 프로그래밍과 명령형 프로그래밍
1
784
2
첫번째 강의 부터 이번강의까지 수강하면서 궁금한점 질문드립니다.
0
325
1
안녕하세요. 질문이 있습니다.
1
354
1
logger 가 없는데 util 폴더도 같이 갖다놔야 하나요?
0
327
1
amb 연산자
0
233
1
질문 드립니다.
0
219
1
concatEager( ) 연산자에 관하여
0
318
1
ObservableSequenceEqualExample.java 예제의 delay( ) 연산자 질문있습니다
0
309
3
defer( ), fromFuture( )도 just( )처럼 여러 인자 값을 받을 수 있는지 궁금합니다.
0
264
3
flatMapSingle() 메소드에 대하여
0
620
6
fromFuture() vs fromCallable() 생성 연산자에 대해
0
573
2
함수형 인터페이스 Comparator에 대해
0
397
2
Publisher와 Subscriber 간의 프로세스 흐름에 대한 질문
1
340
3

