Skip to content

Commit 34358eb

Browse files
committed
[1장] Rx실습 전까지 내용 정리
1 parent cccd42b commit 34358eb

File tree

3 files changed

+106
-12
lines changed

3 files changed

+106
-12
lines changed

src/main/kotlin/ezhoon/Main.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package ezhoon
22

3-
import io.reactivex.rxjava3.core.Flowable
4-
53

64
fun main() {
75
Flowable.just("Hello world").subscribe { x: String? ->

src/main/kotlin/kms/Main.kt

Lines changed: 0 additions & 10 deletions
This file was deleted.
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
### 리액티브 프로그래밍
2+
3+
- 이벤트나 데이터가 극단적으로 증가하여 대용량 데이터의 저장, 업데이트, 실시간 반영을 효율적으로 해결할 방법으로 주목되었다
4+
- 2013 년에 마이크로소프트에서 프로그래밍 모델을 비동기 및 이벤트 중심의 데이터 구조로 재정의한 Reactive Extensions 를 자바 진영으로 가져온것
5+
- NetFlix가 공개한 라이브러리
6+
7+
### Reactive Streams 규칙
8+
9+
- onSubscribe 는 해당 구독에서 한번 만 발생한다
10+
- 통지는 순차적으로 이루어진다
11+
- null을 통지하지 않는다
12+
- Publisher의 처리는 onComplete 나 onError 를 통지해 종료한다
13+
14+
### RxJava 기본 구조
15+
16+
- 데이터를 만들고 통지하는 **생산자**
17+
- 통지된 데이터를 받아 처리하는 **소비자**
18+
19+
### 생산자 - 소비자
20+
21+
#### Flowable - Subscriber
22+
- Reactive Streams 지원
23+
- 기본적인 매커니즘이 Reactive Streams 와 같다
24+
- Subscription 으로 **데이터 개수 요청****구독 해지**
25+
- Flowable
26+
- Reactive Streams 의 생산자인 Publisher를 구현
27+
- Subscriver
28+
- Reactive Streams 의 클래스
29+
30+
#### Observable - Observer
31+
- RxJava 2.x 버전
32+
- Reactive Streams 미지원
33+
- 기본적인 매커니즘은 Flowable - Subscriber 와 거의 같다
34+
- 데이터 개수를 제어하는 **배압 기능이 없다**
35+
- 데이터 개수를 요청하지 않음
36+
- 구독 해지 메서드가 있는 인터페이스 **Disposable** 을 사용
37+
38+
### 연산자
39+
40+
- 소비자에게 데이터를 통지하기 전에 불필요한 데이터를 삭제한다
41+
- 소비자가 사용하기 쉽게 데이터를 변환한다
42+
- 연산자가 설정된 시점이 아닌 **데이터가 통지 받는 시점**에 처리가 실행된다
43+
- 함수형 프로그래밍의 영향을 받아 **Side Effect** 를 피하는게 좋다
44+
- 체인 도중이 아닌 소비자 측에서 하는게 좋다
45+
- 여러 스레드에서 공유하는 객체가 없어져 쓰레드 안전을 보장할 수 있다
46+
47+
### 비동기 처리
48+
49+
- 개발자가 직접 스레드를 관리할 필요 없이 처리 목적에 맞춰 **스케줄러**를 설정
50+
- 데이터를 통지하는 부분과 처리하는 부분에 지정할 수 있다
51+
52+
### Cold 생산자와 Hot 생산자
53+
54+
#### Cold 생산자
55+
56+
- 1개의 소비자와 구독 관계를 맺는다
57+
- 새로운 구독이 생기면 데이터를 처음부터 받는다
58+
- RxJava 의 기본 생산자는 Cold
59+
60+
#### Hot 생산자
61+
62+
- 여러 소비자와 구독 관계를 맺는다
63+
- 구독한 시점부터 생산된 데이터를 받게 된다
64+
65+
#### Hot 생산자 생성하기
66+
67+
- Cold 에서 Hot 으로 변환하는 메서드를 호출
68+
- Processor 와 Subject 를 생성
69+
70+
### ConnectableFlowable/ ConnectableObservable
71+
- **Hot 생산자**
72+
- Cold 를 Hot으로 변환하는 연산자로 생성할 수 있다
73+
- subscribe 를 호출해도 처리를 시작하지 않고 **connect 를 호출해야 처리 시작**
74+
- 처음 부터 여러 구독자에게 데이터를 통지할 수 있음
75+
- refCount 를 이용해서 일반 Flowable/Observable 을 반환 할 수 있음
76+
- 같은 timeline 에서 생성되는 데이터 통지
77+
- Connectable 이 아니기 때문에 connect 가 아닌 subscribe 로 데이터 처리 시작
78+
79+
### Flowable/Observable 을 Cold 에서 Hot 으로 변환
80+
81+
- publish()
82+
- replay() / replay(int buffsize) / replay(long time, TimeUnit unit)
83+
- share()
84+
85+
#### publish
86+
87+
- Cold 생산자에서 Connectable 을 생성하는 연산자
88+
- 처리를 시작한 뒤에 구독하면 **구독한 이후에 생성된 데이터 부터 통지**
89+
90+
#### replay
91+
92+
- Cold 생산자에서 Connectable 을 생성하는 연산자
93+
- 통지한 데이터를 캐시하여 처리를 시작한 뒤에 구독하면 캐시된 데이터를 먼저 통지
94+
- 인자가 없으면 **모든 데이터를 캐시**
95+
96+
#### share
97+
98+
- 여러 소비자가 구독할 수 있는 Flowable/Observable(Hot) 을 생성
99+
- **Connectable 을 생성하지 않는다**
100+
- 실질적으로는 flowable.publish().refCount() 와 같다
101+
102+
>[!note] 소비자의 처리 속도가 느린 경우
103+
>- 소비자들이 같은 데이터를 같은 시점에 받지 않을 수 있습니다.
104+
>- 이미 구독하고 있던 소비자는 버퍼에 있는데이터를 통지 받음
105+
>- 새로 구독한 소비자는 최신 데이터를 통지 받음
106+

0 commit comments

Comments
 (0)