Skip to content

Commit f680512

Browse files
committed
[1장] Observable 내용 추가 및 예제 추가
1 parent bfc759f commit f680512

File tree

2 files changed

+78
-1
lines changed

2 files changed

+78
-1
lines changed
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
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+
}

src/main/kotlin/kms/chapter01/README.md

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,4 +131,35 @@
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 계열의 메서드로 특정 시점의 데이터만을 사용

0 commit comments

Comments
 (0)