Learn & Run

RxJava - 예제를 통해 Reactive Streams 이해하기 본문

Java

RxJava - 예제를 통해 Reactive Streams 이해하기

iron9462 2021. 1. 7. 02:49

목표

 

Reactive Streams란 무엇인가 알아보도록 하고, 이것을 통해서 Reactive Programming에서 Data Flow가 어떻게 진행되는지 알아보고 이해하도록 합니다. 

 

 

 

1. Reactive Streams의 정의

 

  • Reactive Streams는 간단하게 비동기 스트림을 처리하는 표준을 제공하기 위한 것이라고 생각하면 된다.
  • 참고 : www.reactive-streams.org/
 

https://www.reactive-streams.org/

Reactive Streams Reactive Streams is an initiative to provide a standard for asynchronous stream processing with non-blocking back pressure. This encompasses efforts aimed at runtime environments (JVM and JavaScript) as well as network protocols. JDK9 java

www.reactive-streams.org

 

 

 

2. Reactive Streams의 특징

 

  • Reactive Streams의 인터페이스들을 구현한 구현체는 RxJava, RxKotlin, RxJS, RxScala등이 있다.
  • 리액티브 프로그래밍에 대한 인터페이스(Publisher, Subscriber, Subscription, Processor)만 제공합니다.

상세 정보는 https://github.com/reactive-streams/reactive-streams-jvm에 잘 나와있으니 참고해보도록 하자.

  • Publisher : 데이터를 생성하고 통지한다.
  • Subscriber : 통지된 데이터를 전달받아서 처리한다.
  • Subscription : 전달받을 데이터의 개수를 요청하고 구독을 해지한다.
  • Processor : Publisher와 Subscriber의 기능을 모두 가지고 있다.

 

 

3. Publisher와 Subscriber의 흐름

 

출처 : https://www.inflearn.com/course/%EC%9E%90%EB%B0%94-%EB%A6%AC%EC%95%A1%ED%8B%B0%EB%B8%8C%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-1

 

 

 

4. Cold Publisher vs Hot Publisher

 

- Cold Publisher 

 

  • 생산자는 소비자가 구독 할때마다 데이터를 처음부터 새로 통지한다.
  • 데이터를 통지하는 새로운 타임 라인이 생성된다.
  • 소비자는 구독 시점과 상관없이 통지된 데이터를 처음부터 전달 받을 수 있다.

출처 : https://www.inflearn.com/course/%EC%9E%90%EB%B0%94-%EB%A6%AC%EC%95%A1%ED%8B%B0%EB%B8%8C%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-2

 

- Hot Publisher

 

  • 생산자는 소비자 수와 상관없이 데이터를 한번만 통지한다.
  • 데이터를 통지하는 타임라인은 오직 하나이다.
  • 소비자는 발행된 데이터를 처음부터가 아닌, 구독한 시점부터 통지된 데이터만을 전달 받을 수 있다.

출처 : https://www.inflearn.com/course/%EC%9E%90%EB%B0%94-%EB%A6%AC%EC%95%A1%ED%8B%B0%EB%B8%8C%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-2
Cold Publisher와 Hot Publisher의 예제 코드를 간단하게 작성하여 결과값을 확인해보고 어떤 차이가 있는지 느껴보도록 하자.
좌 : Cold Publisher예제 결과, 우 : Hot Publisher예제 결과