Posts RxJava - Reative Streams란?
Post
Cancel

RxJava - Reative Streams란?

Reactive Streams란?

  • 리액티브 프로그래밍 라이브러리의 표준 사양이다. => 참고링크
  • 리액티브 프로그래밍에 대한 인터페이스만 제공한다.
  • RxJava는 이 Reactive Streams의 인터페이스들을 구현한 구현체이다.
  • Reactive Streams는 Publisher, Subscriber, Subscription, Processor 라는 4개의 인터페이스를 제공한다.
    • Publisher(생산자) : 데이터를 생성하고 통지한다.
    • Subscriber(소비자) : 통지된 데이터를 전달받아서 처리한다.
    • Subscription(구독) : 전달 받을 데이터의 개수를 요청하고 구독을 해지한다.
    • Processor : Publisher와 Subscriber의 기능이 모두 있음.

Publisher와 Subscriber간의 프로세스 흐름

Publisher 와 Subscriber

Cold Publisher & Hot Publisher

Cold Publisher(차가운 생산자)

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

Cold publisher

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import io.reactivex.Flowable;

public class ColdPublisherExample {
    public static void main(String[] args) {
        Flowable<Integer> flowable = Flowable.just(1,3,5,7);

        flowable.subscribe(data -> System.out.println("구독자1: " + data));
        flowable.subscribe(data -> System.out.println("구독자2: " + data));
    }
}
/*
구독자1: 1
구독자1: 3
구독자1: 5
구독자1: 7
구독자2: 1
구독자2: 3
구독자2: 5
구독자2: 7
*/

Hot Publisher(뜨거운 생산자)

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

Hot Publisher

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import io.reactivex.processors.PublishProcessor;

public class HotPublisherExample {
    public static void main(String[] args) {
        PublishProcessor<Integer> processor = PublishProcessor.create();
        processor.subscribe(data -> System.out.println("구독자1: " + data));
        processor.onNext(1);
        processor.onNext(3);

        processor.subscribe(data -> System.out.println("구독자2: " + data));
        processor.onNext(5);
        processor.onNext(7);

        processor.onComplete();
    }
}
/*
구독자1: 1
구독자1: 3
구독자1: 5
구독자2: 5
구독자1: 7
구독자2: 7
*/

이 글은 inflearn에 있는 Kevin의 알기 쉬운 RxJava 1부를 공부하고 작성한 글입니다.
강의영상 링크

This post is licensed under CC BY 4.0 by the author.

RxJava - 프로젝트 환경 구축 및 Hello RxJava

RxJava - Flowable과 Observable

Comments powered by Disqus.