๋๋ฒ์งธ ๊ธ์์๋ ์ดํดํ RxSwift์ ๊ธฐ๋ณธ ๊ฐ๋ ์ ๋ฐํ์ผ๋ก ์์ฃผ ์ฌ์ฉํ๋ ๋ฉ์๋๋ฅผ ์์๋ณธ๋ค. ๋ฌด๋ฆฌํ๊ฒ ๊ธฐ์ตํ ํ์๋ ์๊ณ , ์ด๋ ๊ฒ ์ฌ์ ์ ์๋ ํจ์๋ค์ด ๋ง๊ณ , ์ ์ฌ์ฉํ ๊ฒฝ์ฐ ์ ์ฉํ๋ค๋ ์ฌ์ค๊น์ง๋ง ์ดํดํด๋ ๋ง๋ณด๊ธฐ๋ก๋ ์ถฉ๋ถํ ๋ฏ ํ๋ค.
๋ณต์ต
- ์ ์ฌ์ฉ?
- ๋น๋๊ธฐ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ๋ฐ์ดํฐ๋ฅผ ํ์ ์ผ๋ก ๋ฆฌํดํ๊ธฐ ์ํ ๋ฐฉ๋ฒ
- ๋น๋๊ธฐ์ ์ผ๋ก ์๊ธฐ๋ ๋ฐ์ดํฐ๋ฅผ ๋์ค์์๊ธฐ๋๋ฐ์ดํฐ ํด๋์ค ํ์ ์ผ๋ก ๊ฐ์ธ์ ๋ง์น ๋ฐ์ดํฐ๊ฐ ์๋ ๊ฒ ๋ง๋ฅ ํ์ ์ผ๋ก ๋ฐ๋ ๊ฒ์ฒ๋ผ ์ฐฉ๊ฐ์ ์ฃผ๊ฒํ๋ ๋ฐฉ๋ฒ
- ์ค์ ๋ฐ์์ ์ฌ์ฉํ ๋ ํด๋น ๋์์ด ๋ฐ์ํ๋ค.
Sugar API
- ๊ทผ๋ฐ ์์ ์ฝ๋๋ฅผ ๋ณด๋ฉด ๋๋ฌด ์ฌ์ฉ๋ฒ์ด ๊ธธ๋ค.
- ๊ท์ฐฎ์ ๊ฒ์ ์์ ์ฃผ๋ API๋ฅผ ์์๋ณด์.
๊ทธ๋ฅ ํ๋์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๋ ๋ฐฉ๋ฒ (Just)
- ์ด๋ ๊ฒ ๊ฐ๋จํ๊ฒ ๋ณด๋ผ ์ ์๋ค.
์์๋ฅผ ํ๋์ฉ ๋ณด๋ด๊ณ ์ถ์ผ๋ฉด? (from)
- ๋ง์ฝ์ ๋๊ฐ๋ฅผ ๋ณด๋ด๊ณ ์ถ์ผ๋ฉด?
- ์ด๋ ๊ฒ ๋ณด๋ด๋ฉด ๊ทผ๋ฐ ๋ฐฐ์ด ์์ฒด๊ฐ ๋์ด๊ฐ๊ฒ ๋จ
- ์ด๋ ๊ฒ ํ๋ฉด ์์ ํ๋์ฉ onNext๋ก ๋์ด๊ฐ๋ค.
onNext๋ง ๋ฐ๊ณ ์ถ์ ๊ฒฝ์ฐ (subscribe(onNext:))
- ์ด๋ ๊ฒ ๊ณ์ ์ฐ๋ ๊ฒ์ ๋๋ฌด ๋ถํธํ๋ค.
- completed ๋ ๊ฒฝ์ฐ๋ error์ธ ๊ฒฝ์ฐ ํ ๋์์ด ์๋ค๋ฉด ์ด๋ ๊ฒ ์จ๋ ๋๋ค.
- ์ด๋ ๊ฒ๋ง ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ๋ ์๋ค.
onComplted
,onDisposed
๋ฑ๋ฑ์ด ์๋ค.
์ฒ๋ฆฌํ๋ ์ค๋ ๋๋ฅผ ๋ณ๊ฒฝํ๋ ๋ฐฉ๋ฒ (.observeOn)
- ๊ธฐ์กด์๋ UIupdate๋ฅผ ํ๊ธฐ ๋๋ฌธ์, URLSession์ ์ํํ๊ณ ์๋ ์ค๋ ๋์์ main ์ค๋ ๋์์ ์ ๋ฐ์ดํธ๋ฅผ ์งํํ๋๋ก dispatchQuee๋ฅผ ์ฌ์ฉํ๋ค.
- ์ด๋ ๊ฒ ์ํํ๋ ๋์์ ์ค๋ ๋๋ฅผ ๋ณ๊ฒฝํ์ฌ ์์ ํ ์ ์๋ค.
- ์ด๋ ๊ฒ subscribe ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์ ์ ๋ค๋ฅธ ๋์์ ์ํํด์ฃผ๋ ๋
์๋ค์ Operator ๋ผ๊ณ ํ๋ค.
- map, filter ๋ฑ๋ ํด๋น๋๋ค.
Dispose ํ๋ฒ์ ํ๊ธฐ (DisposeBag)
- ์ฒ๋ฆฌํด์ผ ํ๋ ์์ ๋ค์ dispose๋ฅผ ๋ฐฐ์ด๋ก ๋ค๊ณ ์๋ค๊ฐ viewWillDisappear์์ ๋ชจ๋ dispose ํ๋ ๋ฐฉ๋ฒ๋ ์๋ค.
- ํ์ง๋ง sugar api๊ฐ ์กด์ฌํ๋๋ฐ,
- ์ด๋ ๊ฒ ํด๋๋ฉด, ํด๋น VC์์ ์ฌ์ฉํ๋ ๋ณ์๋ก์ ๋ฑ๋ก๋๊ธฐ ๋๋ฌธ์, VC๊ฐ Disappear๋๋ ์์ ์ ์๋์ผ๋ก bag์์ ๋ด๊ธด ๋ชจ๋ disposable์ด dispose๋๋ค.
- ์ด๊ฒ๋ ์ซ๋ค!
- ์ด๋ ๊ฒ ๊ฐ๊ฒฐํ๊ฒ ์ฒ๋ฆฌํ ์๋ ์๋ค.
Marble Diagram ์ฝ๊ธฐ
- Sugar API๋ ๋ฌด์งํ๊ฒ ๋ง๋ค.
- ํจ์์ ์ข ๋ฅ๊ฐ ์์ฒญ๋๊ฒ ๋ง์ ๊ฒ์ฒ๋ผ ์์ฒญ ๋ง๋ค.
- ์ด๊ฑธ ์ธ์์ ์ฌ์ฉํ ์ ์์ผ๋, ๋์์ ์ฐพ์์ ์ ์ฉํด์ผ ํ๋๋ฐ, ์ด ๋ ์ค๋ช ํ๋ ๋ฐฉ์์ด Marble Diagram์ด๋ค.
- ObserveOn ํจ์์ ์์๋ฅผ ๋ณด์.
![imAssets/134285034-19761b52-cd5f-40f4-866d-9ad5b2092a0a.png){: .center-small}observeOn
- ๋จผ์ ํ๋์ ์ค ์์ ์ฌ๋ผ์ ์๋ ๋ฐ์ดํฐ๋ค์ Observable์ด๋ค.
- ํน์ ์ฐ์ฐ์๋ค์, raw Data๋ฅผ Observable๋ก ๋ฐ๊ฟ์ฃผ๋ ์ญํ ์ ์ํํ๋๋ฐ (from) ์ด๊ฒฝ์ฐ๋ ํ์ดํ์์ ์ฌ๋ผ์ ์์ง ์๋ค.
- ์๋์ ๋ฐ์ค๋ Operator๋ฅผ ์๋ฏธํ๋ค.
- ์ฒ์์ ๋ณด๋ฉด ์ผ๋ฐ์ ์ผ๋ก ์์ํ๋ ๊ฒ์์ ํ์ดํ๊ฐ ์๋ ํ๋์ ํ์ดํ๋ก ์์ํ๋ค.
- ์ด ์ด์ ๋ ์๋์ ๋ณด๋ฉด ๋ณด์ด๋
SubscribOn
ํจ์์ ์ํฅ์ด๋ค. - ObserveOn ํจ์๋ฅผ ์์ํ๋ฉด Observable ๊ฐ์ฒด๋ค์ด ํด๋น operator๊ฐ ์ง์ ํ๋ ์ค๋ ๋์์ ๋์์ ์ํํ๊ฒ ๋๋๋ฐ, ์์ด๋ฅผ ํด์ํด๋ณด๋ฉด, ์ด๋ฌํ ์ค๋ ๋์์ ๊ด์ฐฐ์ ํด์ค ๋ผ๋ ์๋ฏธ์ด๋ค.
- ์ฆ, ๊ด์ฐฐํ๋ ์ชฝ(์๋ฅผ ๋ค์ด View) ์์ ์ฌ์ฉํ ์ค๋ ๋๋ฅผ ๋ณ๊ฒฝํ ๋ ์ฌ์ฉํ๋ค.
SubscribOn
์ ๊ฒฝ์ฐ ์ด๋ ์ค๋ ๋์์ ๊ตฌ๋ ์์ ์ ์์ํ ๊ฒ์ธ์ง๋ฅผ ๊ฒฐ์ ํ๋ค.- ๊ทธ๋์ ์ด๋ ์์ ์ ํด๋น ํจ์๊ฐ ์๋์ง์ ์๊ด์์ด ์ฒ์ ์์ ์ ์คํํ๋ ์ค๋ ๋๊ฐ ํ๋์์ด ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.