Reactive Programming์ด๋?
๊น์ฑ์ผ๋์ ๋ฆฌ์กํฐ๋ธ ํ๋ก๊ทธ๋๋ฐ์ด๋? ๊ธ์ ๋ฉ์ธ์ผ๋ก ์ฐธ๊ณ ํ๊ณ ์์ต๋๋ค.
-
์ด ๊ธ์ ๊ฐ์ธ์ ์ธ ํ์ต๊ณผ ๊ณต์ ๋ฅผ ๋ชฉ์ ์ผ๋ก ์์ฑ๋ ๊ธ์
๋๋ค.
์ฐธ๊ณ ํ ๋ ํผ๋ฐ์ค๋ ๊ธ์ ํ๋จ์ ๊ธฐ์ฌํด๋์์ผ๋ฉฐ ์๋ฌธ์ ๊ทธ๋๋ก ๊ฐ์ ธ๋ค ์ด ๋ด์ฉ๋ ์์ผ๋ ์ฐธ๊ณ ํด์ฃผ์๊ธฐ ๋ฐ๋๋๋ค.
๋ค์ด๊ฐ๊ธฐ์ ์
RxSwift๋ฅผ ๊ณต๋ถํ๋ ค๊ณ ํ์๋์? ๊ทธ๋ผ ๋ฐ์ํ ํ๋ก๊ทธ๋๋ฐ์ด๋ ๋ฌด์์ธ์ง, Rx๊ฐ ๋ฌด์์ธ์ง ์์๋ณด๊ณ ์์ํ๋๋ก ํ์ฃ .
๊ธ์ ์ฝ๊ณ ๋๋ฉด ์ RxSwift๊ฐ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ์ํ API์ธ์ง ์ดํด๊ฐ ์กฐ๊ธ์ ๊ฐ์ค๊ฑฐ๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์ด๋ฒ ๊ธ์์๋ Rx, Reactive Programming ๋ค์ ํค์๋์ ์๋ฏธ๊ฐ ๋ฌด์์ธ์ง๋ง ์๊ฒ ๋๋ค๋ฉด ์ฑ๊ณต์ ๋๋ค. ๊ทธ๋ผ ๊ฐ๋ณด๋๋ก ํ์ฃ .
Reactive Programming(๋ฐ์ํ ํ๋ก๊ทธ๋๋ฐ)์ผ๋ก์ ์ฌํ
Rx
๐ฌ - Rx๋ Reactive programming์ ๊ฐ๋ฅํ๊ฒ ํด์ฃผ๋ API์ ๋๋ค.
๐ฌ - ๊ทธ๋ ๋ค๋ฉด RxSwift๋ Swift์์ Reactive programming์ ๊ฐ๋ฅํ๊ฒ ํด์ฃผ๋ API, Extension์ ๋๋ค.
Reactive programming
๊ฐ๋จํ๊ฒ ์์ฝํ๋ฉด ํจ๋ฌ๋ค์(Paradigm) ์ ๋๋ค.
๋ ์์ธํ๊ฒ ์ํคํผ๋์์ ์ค๋ช ์ด ๋์์์ต๋๋ค.
๋ฆฌ์กํฐ๋ธ ํ๋ก๊ทธ๋๋ฐ์ ๋ฐ์ดํฐ ํ๋ฆ(data flows)๊ณผ ๋ณํ ์ ํ์ ์ค์ ์ ๋ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์(programming paradigm)์ด๋ค. ์ด๊ฒ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ์ ์ ๋๋ ๋์ ์ธ ๋ฐ์ดํฐ ํ๋ฆ์ ์ฝ๊ฒ ํํํ ์ ์์ด์ผํ๋ฉฐ, ๋ฐ์ดํฐ ํ๋ฆ์ ํตํด ํ๋ถ ์คํ ๋ชจ๋ธ์ด ์๋์ผ๋ก ๋ณํ๋ฅผ ์ ํํ ์ ์๋ ๊ฒ์ ์๋ฏธํ๋ค.
๐ฃ ๋ป์ด ๊ต์ฅํ ์ดํดํ๊ธฐ ์ด๋ ต์ฃ ..? ๋จธ๋ฆฌ๊ฐ ๋น ์ง ๊ฒ ๊ฐ์ง๋ง ๊ทธ๋ฅ ์ด๋ฐ๊ฒ ์๊ตฌ๋ ํ๊ณ ๋ค์์ผ๋ก ๋์ด๊ฐ์๋ค.
๐๐ปโ๏ธ ํจ๋ฌ๋ค์์ด ๋ญ์ฃ ??
๐ง๐ป๐ป '์ด๋ค(~~~์ด๋ฐ) ๋ฐฉ์·๋ฐฉ๋ฒ์ผ๋ก ํ๋ก๊ทธ๋๋ฐ ํ์' ์ด๋ฐ ์๋ฏธ๋์!
Functional programming
Reactive programming(๋ฐ์ํ ํ๋ก๊ทธ๋๋ฐ)์ด Functional programming(ํจ์ํ ํ๋ก๊ทธ๋๋ฐ)์ ํ์ฉํฉ๋๋ค.
I want to know Rx, more easily
โก๏ธ ์ฌ์ค ์์ง๊น์ง๋ ์ ์๋ฟ์ง ์์ต๋๋ค.
โก๏ธ ๊ทธ๋ฌ๋๊น Reactive Programming์ด ์ด๋ค ํจ๋ฌ๋ค์์ธ์ง๋ ์๊ฒ ๊ณ ,
Rx๋ผ๋ ๊ฒ์ด Reactive Programming์ ๊ฐ๋ฅํ๊ฒ ํด์ฃผ๋ API์ธ ๊ฒ๋ ์์๋๋ฐ
ํฌ์ธํธ ์ข ์๋ ค์ฃผ์ธ์...๐ฅ
๐ ์กฐ๊ธ ๋ ์ดํดํด๋ณด๋๋ก ํฉ์๋ค~!
๋ฐ์ํ ํ๋ก๊ทธ๋๋ฐ์ด ์ ํ์ํ ๊น?
๐ฃ
์ฐ๋ฆฌ๋ ์ฌ์ฉ์ ๊ฒฝํ์ ํฅ์์ํค๊ณ ์ถ์ดํฉ๋๋ค. ์ด ๋ง์ธ ์ฆ์จ ๋ฐ์ํ ์ฑ์ ๋ง๋ค๊ณ ์ถ์ดํฉ๋๋ค.
๋ฉ์ธ์ค๋ ๋๊ฐ ๋ฉ์ถ๊ฑฐ๋ ๋๋ ค์ง์ง ์๋๋ก ํด์, ์ฌ์ฉ์๋ค์๊ฒ ๋ถ๋๋ฌ์ด ์ฌ์ฉ์ ๊ฒฝํ๊ณผ ์ข์ ์ฑ๋ฅ์ ์ ๊ณตํ๊ณ ์ถ์ดํฉ๋๋ค.
๊ทธ๋ฌ๋๊น ๋ฉ์ธ์ค๋ ๋๋ฅผ ์์ ๋กญ๊ฒ ์ ์งํ๋ ค๋ฉด ๋ฌด๊ฒ๊ณ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๋ ์์
์ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ํด์ผ ํด์.
์ด๋ฌํ ์์
๋ค์ ์๋ฒ๊ฐ ์ํํ๊ธฐ๋ฅผ ์ํ๋๋ฐ ๊ทธ๋์ ์ฐ๋ฆฌ๋ ๋คํธ์ํฌ ์ด์์ ์ํ '๋น๋๊ธฐ ์์
'์ด ํ์ํฉ๋๋ค.
์ ๋ฆฌํด๋ณด๋ฉด ์ฌ์ฉ์ ๊ฒฝํ์ ํฅ์์ํค๊ธฐ ์ํด์ ๋น๋๊ธฐ ์์ ์ด ํ์ํ๋ฐ ์ด ๋ ๋ฆฌ์กํฐ๋ธ ํ๋ก๊ทธ๋๋ฐ์ด ํ์ํ ๊ฒ์ด์ฃ .
๐ง๐ป๐ป ์ ๋ฆฌ๋ฅผ ์ ๊น ํด๋ณด๋ฉด, ๋น๋๊ธฐ ์์
์ ์ข ๋ ์ํ๊ธฐ ์ํด ๋ฆฌ์กํฐ๋ธ ํ๋ก๊ทธ๋๋ฐ์ด ํ์ํ ๊ฑฐ๊ตฌ๋!?
๋ฐ์ํ ํ๋ก๊ทธ๋๋ฐ์ ๋ ์์๋ณด์
์์์ ์ดํด๋ณด์๋ ๋ฐ์ํ ํ๋ก๊ทธ๋๋ฐ์ ์ค๋ช ์ ๊ฐ๋จํ ํค์๋๋ก ๋ฐ๊พธ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ด์ผ๊ธฐ ํ ์ ์์ต๋๋ค.
RX = OBSERVABLE + OBSERVERS + SCHEDULERS
Observable
๐ฃ
์ฐ์ ์ ์ผ๋ก Observable์ ๊ณต๊ธ์๋ผ๊ณ ์๊ฐํฉ์๋ค.
๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ณ ๋ค๋ฅธ ๊ตฌ์ฑ์์์ ์ ๋ฌํ๋ ์ญํ ์ ํฉ๋๋ค.
- Observable์ ๋ฐ์ดํฐ ์คํธ๋ฆผ์ ๋๋ค.
- Observable์ ํ๋์ ์ค๋ ๋์์ ๋ค๋ฅธ ์ค๋ ๋๋ก ์ ๋ฌํ ๋ฐ์ดํฐ๋ฅผ ์์ถํฉ๋๋ค.
- ์ฃผ๊ธฐ์ ์ผ๋ก ๋๋ ์ค์ ์ ๋ฐ๋ผ ์์ ์ฃผ๊ธฐ๋์ ํ ๋ฒ๋ง ๋ฐ์ดํฐ๋ฅผ ๋ฐฉ์ถํฉ๋๋ค.
Observers
๐ฃ
Observable๊ณผ ๋์์์ผ์ ์๊ฐํด๋ณด๋ฉด Observers๋ ์๋น์(๊ตฌ๋
์)๋ผ๊ณ ๋ณผ ์ ์๊ฒ ๋ค์.
์ ๋ฌ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ๋ค์ํ ์์
์ ์ํํ ์ ์์ต๋๋ค.
- Observers๋ Observable์ ์ํด ๋ฐฉ์ถ๋ ๋ฐ์ดํฐ ์คํธ๋ฆผ์ ์๋นํฉ๋๋ค.
- Observers๋ subscribeOn()๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ Observable์ ๊ตฌ๋ ํ๊ณ Observable์ด ๋ฐฉ์ถํ๋ ๋ฐ์ดํฐ๋ฅผ ์์ ํ ์ ์์ต๋๋ค.
- Observable์ด ๋ฐ์ดํฐ๋ฅผ ๋ฐฉ์ถํ ๋๋ง๋ค ๋ฑ๋ก๋ ๋ชจ๋ Observer๋ onNext() ์ฝ๋ฐฑ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์์ ํฉ๋๋ค.
- onNext()์ฝ๋ฐฑ์์ JSON ์๋ต ํ์ฑ์ด๋ UI ์ ๋ฐ์ดํธ์ ๊ฐ์ ๋ค์ํ ์์ ์ ์ํํ ์ ์์ต๋๋ค.
- Observable์์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ฉด, Observer๋ onError()์์ ์๋ฌ๋ฅผ ์์ ํฉ๋๋ค.
Schedulers
Rx๋ ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ์ํ ๊ฒ์ด๊ณ , ์ฐ๋ฆฌ๋ ์ค๋ ๋ ๊ด๋ฆฌ๊ฐ ํ์ํ๋ค๋ ๊ฒ์ ๊ธฐ์ตํด์ผํฉ๋๋ค.
๐ฃ
Schedulers๋ Observable๊ณผ Observers์๊ฒ ๊ทธ๋ค์ด ์คํ๋์ด์ผ ํ ์ค๋ ๋๋ฅผ ์๋ ค์ฃผ๋ Rx์ ๊ตฌ์ฑ์์์
๋๋ค.
- observeOn() ๋ฉ์๋๋ก observers์๊ฒ ๊ด์ฐฐํด์ผ ํ ์ค๋ ๋๋ฅผ ์๋ ค์ค ์ ์์ต๋๋ค.
- scheduleOn() ๋ฉ์๋๋ก observable์ด ์คํํด์ผ ํ ์ค๋ ๋๋ฅผ ์๋ ค์ค ์ ์์ต๋๋ค.
์ฑ์์ Rx๋ฅผ ์ฌ์ฉํ๋ ๊ฐ๋จํ 3๋จ๊ณ
๋ชจ๋ Rx์์ ๊ณตํต์ ์ผ๋ก ๊ธฐ์ตํด์ผํ ๊ฒ์ 3๊ฐ์ง์ ๋๋ค. observable observer Thread
์ฌ์ค ๋ค์์ ์์ธํ๊ฒ ์ดํด๋ณผ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ด ๋ถ๋ถ์์๋ ์ด๋ฌํ ๊ฒ์ด ์๋ค๋ผ๊ณ ๋ง ์๊ฐํ๊ณ ๋์ด๊ฐ๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
3๊ฐ์ง ํน์ง๋ง ๊ฐ๋ณ๊ฒ ๋ณด๊ณ ๋์ด๊ฐ๋๋ก ํฉ์๋ค.

General Marble Diagram
Step 1 : ๋ฐ์ดํฐ๋ฅผ ๋ฐฉ์ถํ๋ observable ์์ฑ:
- Observable์ ๋ฐ์ดํฐ๋ฅผ ๋ฐฉ์ถํ๋ ์ญํ ์ ํฉ๋๋ค.
- ๋ค์ํ ์ฐ์ฐ์์ ํจ๊ป ์ฌ์ฉํฉ๋๋ค.
Step 2 : ๋ฐ์ดํฐ๋ฅผ ์๋นํ๋ observer ์์ฑ:
- Observable(์ต์ ๋ฒ๋ธ)์ด ๋ฐฉ์ถํ ๋ฐ์ดํฐ๋ฅผ ์๋นํ๋ Observer๋ฅผ ์์ฑํฉ๋๋ค.
- ๋ด๋ถ์์ ๋ฐ์ดํฐ์ ์๋ฌ๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค.
Step 3 : ๋์์ฑ ๊ด๋ฆฌ:
- ๋์์ฑ์ ๊ด๋ฆฌํ๋ ์ค์ผ์ค๋ฌ๋ฅผ ์ ์ํฉ๋๋ค.
- ๋ฐฑ๊ทธ๋ผ์ด๋ ์ค๋ ๋์์ ์์ ์ ์คํํ ์ง, ๋ฉ์ธ ์ค๋ ๋์์ ์์ ์ ์คํํ ์ง ๊ฒฐ์ ํฉ๋๋ค.
๋ง๋ฌด๋ฆฌ ์๊ฐ
์ ๋ฆฌ๋ฅผ ๊ฐ๋จํ๊ฒ ํด๋ณด๋๋ก ํด์. ๋ด์ฉ์ด ์กฐ๊ธ ๊ธธ์์ง๋ง ์๋์ ๋ด์ฉ์ด ์ ๋ถ๋๋๋ค.
- Reactive Programming์ ํ๋์ ํจ๋ฌ๋ค์์ด๋ค.
- Reactive Programming์ ๋น๋๊ธฐ ์์ ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ํ์ํ๋ค.
- Rx๋ Reactive Programming์ ๊ฐ๋ฅํ๊ฒ ํด์ฃผ๋ API, Extension์ด๋ค.
- Rx๋ Observable, Observers, Schedulers 3๊ฐ์ง๋ก ์ดํดํ ์ ์๋ค.
- Observable์ ๋ฐ์ดํฐ๋ฅผ ๋ฐฉ์ถํ๋ ์ญํ , Observers๋ Observable์ ๊ตฌ๋ ํ๊ณ Observable์ด ๋ฐฉ์ถํ ๋ฐ์ดํฐ๋ฅผ ์์ , ์ฒ๋ฆฌํ๋ฉฐ ์๋ฌ๋ฅผ ์ฒ๋ฆฌํ๋ค. Scheduler๋ ์์ ์ ์ด๋ค ์ค๋ ๋์์ ์ฒ๋ฆฌํ ์ง ๊ฒฐ์ ํ๋ค.
ํ ์ค ์์ฝ (๋ ์ค..?! ใ
ใ
)
๋ฐ์ํ ํ๋ก๊ทธ๋๋ฐ์ ๋น๋๊ธฐ ์์
์ ์ฒ๋ฆฌํ๊ธฐ ์ํ ํ๋์ ๋ฐฉ์์ด๊ตฌ๋...
Rx๋ ๊ทธ ๋ ์ฌ์ฉํ๋ ๋๊ตฌ์ด๊ตฌ๋...
๋ ํผ๋ฐ์ค
https://medium.com/@kevalpatel2106/what-is-reactive-programming-da37c1611382
https://dev-daddy.tistory.com/25