ReactiveX의 이해
(주) 파트너
임성태
ReactiveX
● Observer pattern 의 확장판
● Functional Reactive Programming (함수형 반응형 프로그래밍)
● Streams of asynchronous events (비동기 이벤트 스트림)
ReactiveX
가독성이 뛰어나다.
버그(bugs)의 발생률이 낮다.
Stream
명사 (n)
(액체ㆍ기체의) 줄기
(사람, 차량들로 계속 이어진) 줄
[흐름]
(수많은 일의) 연속 [이어짐]
동사 (v)
(액체ㆍ기체가) 줄줄 [계속] 흐르
다 [흘러나오다]
(많은 사람 사물들이) 줄을 지어
[줄줄이] 이어지다 [이동하다]
(컴퓨터) 스트림 처리하다 (데이
터 전송을 연속적으로 이어
서 하다)
흐름을 읽어라.
Observable
Observable
ReactiveX의 observer는 Observable을 구독(subscribe)한다.
Observable이 배출(emit)하는 하나 또는 연속된 항목에 observer는 반응한다.
Observable
subscribe
Observable / Subject
Observer Observer
subscribe
publish
Observable
● Hot Observable
○ Observable이 생성되자마자 항목들을 배출(emit)한다.
○ 이 Observable을 구독하는 observer들은 항목들이 배출되는 중간부터 구독
(subscribe)하게 된다.
● Cold Observable
○ Observable을 구독(subscribe) 하기 전 까지 항목들을 배출(emit)하지 않는다.
○ Observable이 배출(emit)하는 모든 항목들을 구독할 수 있도록 보장 받는다.
Operators
Operators
Observable과 observer는 ReactiveX의 시작점에 불과
Reactive Extensions(ReactiveX)의 진짜 힘은 연산자(operators)로부터 나온다.
연산자(operators)들은 Observable이 배출(emit)하는 연속된 항목들을 변환시키
고, 결합하고, 조작하는 기능들을 제공
Operators
● 생성 (Creating Observables)
● 변환 (Transforming Observables)
● 필터링 (Filtering Observables)
● 결합 (Combining Observables)
● 오류 처리 연산자 (Error Handling Operators)
● 유틸리티 연산자 (Observable Utility Operators)
Operators
● 조건과 불린 연산자 (Conditional and Boolean Operators)
● 수학과 집계 연산자 (Mathematical and Aggregate Operators)
● 역압 연산자 (Backpressure Operators)
● 연결 가능한 Observable 연산자 (Connectable Observable Operators)
● 변환 연산자 (Operators to Convert Observables)
ReactiveX의 이해
Operators (Creating Observables)
● Create
● Defer
● From
● Interval
● Just
● Range
Operators (Transforming Observables)
● Buffer
● FlatMap
● GroupBy
● Map
Operators (Filtering Observables)
● Debounce
● Distinct
● ElementAt / IgnoreElements
● Filter
● First / Last
● Skip / SkipLast
● Take / TakeLast
Operators (Combining Observables)
And / Then / When
CombineLatest
Join
Merge
Zip
Operators (Error Handling Operators)
Catch
Retry
Operators (Observable Utility Operators)
Delay
ObserveOn
Subscribe
SubscribeOn
Operators (Conditional and Boolean Operators)
All
Amb
Contains
DefaultIfEmpty
SkipUntil / SkipWhile
TakeUntil / TakeWhile
Operators (Mathematical and Aggregate Operators)
Average
Concat
Count
Max
Min
Reduce
Sum
Operators (Connectable Observable Operators)
Connect
Publish
RefCount
Replay
Operators (Operators to Convert Observables)
To
Operators - Map
Operators - Map
Observable.just("a")
.map(String::toUpperCase)
.subscribe(System.out::println);
● Result :
A
Observable.from(Arrays.asList("a", "b", "c"))
.map(String::toUpperCase);
.subscribe(System.out::println);
● Result :
A
B
C
Operators - Debounce
Operators - Filter
Operators - Filter
Observable.range(1, 10)
.filter(num -> num > 5)
.subscribe(System.out::println); ● Result :
6
7
8
9
10
Operators - CombineLatest
Operators - CombineLatest
Observable<String> stringObservable =
Observable.just(“a”).map(String::toUpperCase);
Observable<Integer> numberObservable =
Observable.range(1, 3).map(num -> num * 10);
Observable.combineLatest(
stringObservable,
numberObservable,
(s, integer) -> s + integer)
.subscribe(System.out::println);
● Result :
A10
A20
A30
Operators - Merge
Operators - Merge
Observable<String> stringObservable =
Observable.from(Arrays.asList("a", "b", "c"))
.map(String::toUpperCase);
Observable<String> numberObservable =
Observable.range(1, 3)
.map(num -> String.valueOf(num * 10));
Observable.merge(stringObservable, numberObservable)
.subscribe(System.out::println);
● Result :
A
B
C
10
20
30
Operators - Delay
Subject
Subject
AsyncSubject
BehaviorSubject
PublishSubject
ReplaySubject
Subject (AsyncSubject)
Subject (AsyncSubject)
Observable로부터 배출(emit) 된 마지막 값(만)을 배출(emit)하고,
Observable의 동작이 완료된 후에야 동작한다.
Subject (BehaviorSubject)
Subject (BehaviorSubject)
● BehaviorSubject를 구독(subscribe)하기 시작하면,
observer는 Observable이 가장 최근에 발행(publish)한 항목의
발행(publish)을 시작하며,
그 이후 Observable에 의해 발행된 항목들을 계속 발행(publish)한다.
Subject (PublishSubject)
Subject (PublishSubject)
구독(subscribe) 이후에 Observable이 배출(emit)한 항목들만 배출(emit)한다.
Subject (ReplaySubject)
Subject (ReplaySubject)
observer가 구독(subscribe)을 시작한 시점과 관계 없이,
Observable이 배출(emit)한 모든 항목들을
observer에게 배출(emit)한다.
Q & A
ReactiveX
RxJava - https://github.com/ReactiveX/RxJava
RxJS - https://github.com/ReactiveX/rxjs
Rx.NET - https://github.com/Reactive-Extensions/Rx.NET
UniRx(C# Unity) - https://github.com/neuecc/UniRx
RxScala - http://reactivex.io/rxscala/
RxClojure - https://github.com/ReactiveX/RxClojure
ReactiveX
RxCpp(C++) - https://github.com/Reactive-Extensions/RxCpp
RxLua - https://github.com/bjornbytes/RxLua
Rx.rb(Ruby) - https://github.com/ReactiveX/RxRuby
RxPY(Python) - https://github.com/ReactiveX/RxPY
RxGo - https://github.com/ReactiveX/RxGo
RxGroovy - https://github.com/ReactiveX/RxGroovy
ReactiveX
RxJRuby - https://github.com/ReactiveX/RxJRuby
RxKotlin - https://github.com/ReactiveX/RxKotlin
RxSwift - https://github.com/ReactiveX/RxSwift
RxPHP - https://github.com/ReactiveX/RxPHP
reaxive(Elixir) - https://github.com/alfert/reaxive
RxDart - https://github.com/ReactiveX/rxdart
ReactiveX의 이해

More Related Content

PPTX
Nmap 9つの真実
PPTX
OpenSSHの認証に証明書を使う
PDF
눈으로 듣는 음악 추천 시스템
PDF
動的なILの生成と編集
PDF
第17回Lucene/Solr勉強会 #SolrJP – Apache Lucene Solrによる形態素解析の課題とN-bestの提案
PDF
【Unite Tokyo 2019】ライブエンターテイメントにおけるUnity
PDF
Docker volume基礎/Project Longhorn紹介
PPTX
JavaScriptの仕組みと未来のJavaScript ~ESNextとは~
Nmap 9つの真実
OpenSSHの認証に証明書を使う
눈으로 듣는 음악 추천 시스템
動的なILの生成と編集
第17回Lucene/Solr勉強会 #SolrJP – Apache Lucene Solrによる形態素解析の課題とN-bestの提案
【Unite Tokyo 2019】ライブエンターテイメントにおけるUnity
Docker volume基礎/Project Longhorn紹介
JavaScriptの仕組みと未来のJavaScript ~ESNextとは~

What's hot (20)

PPT
Glibc malloc internal
PDF
Rails A/B testing by split gem
KEY
Vyatta 改造入門
PDF
コールバックと戦う話
PDF
受託開発でテストファーストしたらXXXを早期発見できてハイアジリティになったはなし
PPTX
Spring 12年の歴史
PDF
OCamlのアセンブラを読む話
PDF
DevOps Overview
 
PDF
Unityではじめるオープンワールド入門 アーティスト編
PPTX
オンプレ&HTTP Proxyな環境でRancherOS入れてみた話
PDF
Github 으로 학교 팀 프로젝트 하기
PDF
[NDC10] Unity Build 로 빌드타임 반토막내기 - 송창규
PPTX
CyberChefの使い方(HamaCTF2019 WriteUp編)
PPTX
フロントエンドの技術を刷新した話し。
PDF
3D描画基礎知識
PDF
20191009 AWS Black Belt Online Seminar Amazon GameLift
PDF
スケーラブル SwiftUI プロジェクトにおける実用的な TCA モジュラー化
PDF
AWS CDKに魅入られた PHPer がオススメする
PDF
【Unite Tokyo 2019】今すぐ現場で覚えておきたい最適化技法 ~「ゲシュタルト・オーディン」開発における最適化事例~
PDF
Laravelとテストについて
Glibc malloc internal
Rails A/B testing by split gem
Vyatta 改造入門
コールバックと戦う話
受託開発でテストファーストしたらXXXを早期発見できてハイアジリティになったはなし
Spring 12年の歴史
OCamlのアセンブラを読む話
DevOps Overview
 
Unityではじめるオープンワールド入門 アーティスト編
オンプレ&HTTP Proxyな環境でRancherOS入れてみた話
Github 으로 학교 팀 프로젝트 하기
[NDC10] Unity Build 로 빌드타임 반토막내기 - 송창규
CyberChefの使い方(HamaCTF2019 WriteUp編)
フロントエンドの技術を刷新した話し。
3D描画基礎知識
20191009 AWS Black Belt Online Seminar Amazon GameLift
スケーラブル SwiftUI プロジェクトにおける実用的な TCA モジュラー化
AWS CDKに魅入られた PHPer がオススメする
【Unite Tokyo 2019】今すぐ現場で覚えておきたい最適化技法 ~「ゲシュタルト・オーディン」開発における最適化事例~
Laravelとテストについて
Ad

Similar to ReactiveX의 이해 (8)

PDF
RxJava in Looky
PDF
Rx java intro
PDF
GKAC 2014 Nov. - RxJava를 활용한 Functional Reactive Programming
PDF
Reactive Programming with Rxjs
PDF
웹 프론트엔드 개발자의 얕고 넓은 Rx 이야기
PDF
track2 04. MS는 Rx를 왜 만들었을까? feat. RxJS/ 네이버, 김훈민
PPTX
Rx java essentials
PDF
GDG 2014 - RxJava를 활용한 Functional Reactive Programming
RxJava in Looky
Rx java intro
GKAC 2014 Nov. - RxJava를 활용한 Functional Reactive Programming
Reactive Programming with Rxjs
웹 프론트엔드 개발자의 얕고 넓은 Rx 이야기
track2 04. MS는 Rx를 왜 만들었을까? feat. RxJS/ 네이버, 김훈민
Rx java essentials
GDG 2014 - RxJava를 활용한 Functional Reactive Programming
Ad

ReactiveX의 이해