SlideShare une entreprise Scribd logo
1  sur  49
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)
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의 이해

Contenu connexe

Similaire à ReactiveX의 이해

Similaire à ReactiveX의 이해 (16)

개발자를 위한 공감세미나 tensor-flow
개발자를 위한 공감세미나 tensor-flow개발자를 위한 공감세미나 tensor-flow
개발자를 위한 공감세미나 tensor-flow
 
웹 프론트엔드 개발자의 얕고 넓은 Rx 이야기
웹 프론트엔드 개발자의 얕고 넓은 Rx 이야기웹 프론트엔드 개발자의 얕고 넓은 Rx 이야기
웹 프론트엔드 개발자의 얕고 넓은 Rx 이야기
 
Reactive Programming with Rxjs
Reactive Programming with RxjsReactive Programming with Rxjs
Reactive Programming with Rxjs
 
자바8 스트림 API 소개
자바8 스트림 API 소개자바8 스트림 API 소개
자바8 스트림 API 소개
 
Modern android
Modern androidModern android
Modern android
 
R 기초 : R Basics
R 기초 : R BasicsR 기초 : R Basics
R 기초 : R Basics
 
[252] 증분 처리 플랫폼 cana 개발기
[252] 증분 처리 플랫폼 cana 개발기[252] 증분 처리 플랫폼 cana 개발기
[252] 증분 처리 플랫폼 cana 개발기
 
Re frame
Re frameRe frame
Re frame
 
RUCK 2017 REx: 엑셀 기반 R 연동 통계분석 소프트웨어
RUCK 2017 REx: 엑셀 기반 R 연동 통계분석 소프트웨어RUCK 2017 REx: 엑셀 기반 R 연동 통계분석 소프트웨어
RUCK 2017 REx: 엑셀 기반 R 연동 통계분석 소프트웨어
 
도커(Docker) 메트릭스 & 로그 수집
도커(Docker) 메트릭스 & 로그 수집도커(Docker) 메트릭스 & 로그 수집
도커(Docker) 메트릭스 & 로그 수집
 
Red Hat Forum 2012 - JBoss RHQ - Java Application Monitoring & Management Pla...
Red Hat Forum 2012 - JBoss RHQ - Java Application Monitoring & Management Pla...Red Hat Forum 2012 - JBoss RHQ - Java Application Monitoring & Management Pla...
Red Hat Forum 2012 - JBoss RHQ - Java Application Monitoring & Management Pla...
 
RxJava in Looky
RxJava in LookyRxJava in Looky
RxJava in Looky
 
DEVIEW-FULL-감독판.pptx
DEVIEW-FULL-감독판.pptxDEVIEW-FULL-감독판.pptx
DEVIEW-FULL-감독판.pptx
 
Seed2016 - 개미수열 한주영 (annotated)
Seed2016 - 개미수열 한주영 (annotated)Seed2016 - 개미수열 한주영 (annotated)
Seed2016 - 개미수열 한주영 (annotated)
 
Prometheus Project Journey
Prometheus Project JourneyPrometheus Project Journey
Prometheus Project Journey
 
20140122 techdays mini 앱 개발 세미나(3) - 센서활용 앱 개발
20140122 techdays mini  앱 개발 세미나(3) - 센서활용 앱 개발20140122 techdays mini  앱 개발 세미나(3) - 센서활용 앱 개발
20140122 techdays mini 앱 개발 세미나(3) - 센서활용 앱 개발
 

ReactiveX의 이해