인프런 커뮤니티 질문&답변

덩더러러쿨님의 프로필 이미지

작성한 질문수

Kevin의 알기 쉬운 RxJava 1부

Observable과 Flowable에 대한 이해

Reactive Streams의 구성요소들과 RxJava의 구성요소들의 관계?

해결된 질문

작성

·

288

1

안녕하세요, 강의를 복습하면서 의문점이 생겨 질문드립니다

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의 각각의 구성요소들 간 관계를 '기존 인터페이스의 구현체의 일부일 뿐이다'라고 간단하게 이해하고 넘어가면 되는 걸까요?

답변 2

1

답변 감사합니다! 다시 공부해도 새로 공부하는 느낌이 드는건 왜일까요ㅜ

1

Kevin님의 프로필 이미지
Kevin
지식공유자

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 학습하실 때 참고하시면 좋을 것 같네요.