File tree Expand file tree Collapse file tree 2 files changed +78
-1
lines changed
src/main/kotlin/kms/chapter01 Expand file tree Collapse file tree 2 files changed +78
-1
lines changed Original file line number Diff line number Diff line change 1+ package kms.chapter01
2+
3+ import io.reactivex.Observable
4+ import io.reactivex.ObservableOnSubscribe
5+ import io.reactivex.Observer
6+ import io.reactivex.disposables.Disposable
7+ import io.reactivex.schedulers.Schedulers
8+
9+ private fun main () {
10+ val observable = Observable .create(
11+ ObservableOnSubscribe { emitter ->
12+ val strArr = arrayOf(" Hello, World!" , " 안녕, RxJava!" )
13+
14+ for (str in strArr) {
15+ // 구독이 해제됐는지를 확인합니다.
16+ if (emitter.isDisposed) {
17+ return @ObservableOnSubscribe
18+ }
19+ emitter.onNext(str)
20+ }
21+ emitter.onComplete()
22+ },
23+ )
24+
25+ observable
26+ .observeOn(Schedulers .computation())
27+ .subscribe(object : Observer <String > {
28+ override fun onSubscribe (d : Disposable ) {
29+ }
30+
31+ override fun onNext (item : String ) {
32+ // 배압 기능이 없기 때문에 데이터를 요청하지 않는다
33+ println (" ${Thread .currentThread().name} : $item " )
34+ }
35+
36+ override fun onError (e : Throwable ) {
37+ e.printStackTrace()
38+ }
39+
40+ override fun onComplete () {
41+ println (" ${Thread .currentThread().name} : 완료" )
42+ }
43+ })
44+
45+ Thread .sleep(500L )
46+ }
Original file line number Diff line number Diff line change 131131 - 버퍼 크기를 초과하면 MissingBackPressureException 에러를 통지
132132- ** NONE**
133133 - 특정 처리를 수행하지 않는다.
134- - onBackPressure로 시작하는 메서드로 배압 모드를 설정할 때 사용
134+ - onBackPressure로 시작하는 메서드로 배압 모드를 설정할 때 사용
135+
136+ ### Observable
137+
138+ - Observable 과 Observer 의 관계와 Flowable 과 Subscriber 의 관계의 차이점
139+ - Reactive Streams 사양을 구현하지 않았다
140+ - 배압 기능이 없다
141+ - 배압이 없기 때문에 오버헤드가 적다
142+ - 성능이 중요한 경우 사용
143+
144+ ### Flowable vs Observable
145+
146+ - ** Flowable 사용**
147+ - 대량 데이터(10,000건)를 처리할 때
148+ - 네트워크 통신이나 데이터베이스 등의 I/O 처리를 할 때
149+ - ** Observable 사용**
150+ - GUI 이벤트
151+ - 소량 데이터(1,000건)를 처리할 때
152+ - 데이터 처리가 기본으로 동기 방식이며, 자바 표준의 Stream 대신 사용할 때
153+
154+ #### 사용위치
155+
156+ - ** 서버**
157+ - 메모리가 부족하거나 처리 대기 중인 데이터가 쌓이게 되면 서버 전체에 영향
158+ - 버퍼링의 상한을 정해 ** MissingBackpressureException** 을 발생 시킴
159+ - ** 클라이언트**
160+ - ** MissingBackpressureException** 이 발생하지 않는게 좋음
161+
162+ #### 데이터의 일부만 사용하는 경우
163+
164+ - BackpressureStrategy.DROP 을 설정하면 처리할 수 없는 데이터를 삭제 가능
165+ - Observable 의 throttle 계열의 메서드로 특정 시점의 데이터만을 사용
You can’t perform that action at this time.
0 commit comments