์๋ ํ์ธ์! ์ ์ธ์ ๋๋ค :)
์์ฆ ๋น๋๊ธฐ์ ์ฒ๋ฆฌ์ ๋ํ ํ์์ฑ์ ๋๋ผ๊ณ , ์ํคํ ์ฒ ๊ณต๋ถ๋ ์์ํ๋ค ๋ณด๋ ์์ฐ์ค๋ฝ๊ฒ RxSwift์ ๊ด์ฌ์ด ์๊ฒจ ๊ณต๋ถ๋ฅผ ํด๋ณด๊ณ ์๋๋ฐ์!
RxSwift์ ๊ธฐ๋ณธ ๊ฐ๋ ๋ถํฐ ์ฐจ๊ทผ์ฐจ๊ทผ ์ ๋ฆฌํด๋๊ฐ๋ ค๊ณ ํฉ๋๋ค!
RxSwift๋?
RxSwift๋ Reactive eXtension + Swift์ ํฉ์ฑ์ด๋ก ์ด๋ฃจ์ด์ง ์ฉ์ด๋ก,
Swift์ ReactiveX๋ฅผ ์ ์ฉ์์ผ ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ์ง๊ด์ ์ผ๋ก ์์ฑํ ์ ์๋๋ก ๋์์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ReactiveX๋ ๋ฌด์์ผ๊น์?๐ค
ReactiveX ๊ณต์ ํํ์ด์ง์ ๋ฐ๋ฅด๋ฉด ReactiveX๋,
An API for asynchronous programming
with observable streams
'์ต์ ๋ฒ๋ธ ์คํธ๋ฆผ์ผ๋ก ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ํ๊ธฐ ์ํ API' ์ฏค์ผ๋ก ํด์ํ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค.
์ฌ๊ธฐ์ ๋ ๋๋ ์๋ฌธ.. ์ต์ ๋ฒ๋ธ์ด ๋ญ์ง..? ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ด ๋ญ์ง..?
ํ๋์ฉ ์ดํด๋ด ์๋ค!
Observable
observable์ ์ฌ์ ์ ์๋ฏธ๋ '๊ด์ฐฐํ ์ ์๋' ์ ๋๋ค.
๊ณต์ ์ฌ์ดํธ์์๋ observable์ ์ด๋ป๊ฒ ์ค๋ช ํ๊ณ ์์๊น์?
ReactiveX์์ ์ต์ ๋ฒ๋ Observable์ ๊ตฌ๋ ํ๋ค. Obseravable์ด ๋ฐฐ์ถํ๋ ํ๋ ๋๋ ์ฐ์๋ ํญ๋ชฉ์ ์ต์ ๋ฒ๋ ๋ฐ์ํ๋ค. ์ด๋ฌํ ํจํด์ ๋์์ฑ ์ฐ์ฐ์ ๊ฐ๋ฅํ๊ฒ ํ๋ค. ๊ทธ ์ด์ ๋ Observable์ด ๊ฐ์ฒด๋ฅผ ๋ฐฐ์ถํ ๋๊น์ง ๊ธฐ๋ค๋ฆด ํ์ ์์ด ์ด๋ค ๊ฐ์ฒด๊ฐ ๋ฐฐ์ถ๋๋ฉด ๊ทธ ์์ ์ ๊ฐ์ํ๋ ๊ด์ฐฐ์๋ฅผ ์ต์ ๋ฒ ์์ ๋๊ณ ๊ทธ ๊ด์ฐฐ์๋ฅผ ํตํด ๋ฐฐ์ถ ์๋ฆผ์ ๋ฐ์ผ๋ฉด ๋๊ธฐ ๋๋ฌธ์ด๋ค.
ReactiveX์์ Observable ๊ฐ์ฒด๋ ์ฌ์ ์ ์ธ ์๋ฏธ๋๋ก ์ด๋ค '๊ฐ์ฒด'๋ฅผ ๊ด์ฐฐํ ์ ์๋ ํํ๋ก ๋ง๋๋ ๊ฒ์ ๋งํ๋ฉฐ,
Observable ๊ฐ์ฒด๋ฅผ ์์ฑํจ์ผ๋ก์จ Observer๋ ๊ด์ฐฐ์ ์์(๊ตฌ๋ )ํ๊ฒ ๋ฉ๋๋ค.
์ด '๊ฐ์ฒด'์ ๋ฐ๋ผ ์ค์ ๊ด์ฐฐํ๋ ๊ฐ(= ์คํธ๋ฆผ์ ํ๋ ค๋ณด๋ด๋ ๊ฐ) ํน์ ๊ด์ฐฐ์ ๋์์ธ ์ฌ๊ฑด(=์ด๋ฒคํธ)์ด ๊ฒฐ์ ๋ฉ๋๋ค.
์ฆ, Observable์ ๊ด์ฐฐ ๊ฐ๋ฅํ ๋ฐ์ดํฐ์ ํ๋ฆ์ ๋๋ค. Observer๊ฐ Observable์ ๊ตฌ๋ ํ๊ณ , Observable์ด ๋ฐฉ์ถํ๋ ์ด๋ฒคํธ์ ๋ฐ์ํ๋ ๊ฒ์ด ๋ฐ์ํ(Reactive) ํ๋ก๊ทธ๋๋ฐ์ ๊ฐ์ฅ ํฐ ํต์ฌ์ด๋ผ๊ณ ํ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค.
๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ
ํ์ GCD์ ๋ํด์ ์์ธํ ๋ค๋ค๋ณด๋๋ก ํ๊ณ , ๋๊ธฐ์ ๋น๋๊ธฐ์ ๋ํ ๊ฐ๋ ๋ง ๊ฐ๋จํ ์ ๋ฆฌํ๊ณ ๊ฐ๊ฒ ์ต๋๋ค!
๋๊ธฐ(Synchronous)
๋๊ธฐ๋ '๋์์ ๋ฐ์[์กด์ฌ]ํ๋' ์ด๋ผ๋ ์ฌ์ ์ ์๋ฏธ๋ฅผ ๊ฐ์ง๋ฉฐ, ๋์์ฑ์ ๋ํ๋ธ๋ค๊ณ ๋ณผ ์ ์์ต๋๋ค.
์ฌ์ ์ ์๋ฏธ๋ง ๋ณธ๋ค๋ฉด ์ฌ๋ฌ ๊ฐ์ ์์ ์ ๋์์ ์งํํ ์ ์๋ค๋ ๋ป์ผ๋ก ์คํดํ ์ ์๋๋ฐ, ํ๋ก๊ทธ๋๋ฐ์์ ๋๊ธฐ์ ๋ป์
์์ฒญ๊ณผ ๊ทธ ๊ฒฐ๊ณผ๊ฐ ๋์์ ์ผ์ด๋๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค๊ณ ์ดํดํ๋ฉด ์ฌ์ธ ๊ฒ ๊ฐ์ต๋๋ค.
์ด๋ค ์์ฒญ์ ํ๋ฉด, ์๊ฐ์ด ์ผ๋ง๋ ๊ฑธ๋ฆฌ๋์ง ์์ฒญํ ์๋ฆฌ์์ ๊ฒฐ๊ณผ๊ฐ ์ฃผ์ด์ ธ์ผ ํฉ๋๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ํ๋์ ์์ ์ด ๋๋ ๋๊น์ง ๋ค๋ฅธ ์์ ์ ์์ํ ์ ์์ต๋๋ค.
๋น๋๊ธฐ(Asynchronous)
๋น๋๊ธฐ๋ ๋๊ธฐ์ ๋ฐ๋๋ก, ๋์์ ์ผ์ด๋์ง ์์์ ๋ปํ๋ฉฐ ์ด๋ ์์ ๋ค์ ์์ฒญ๊ณผ ์๋ต์ ํ์ด๋ฐ์ด ๊ฐ์ง ์์๋ ๋๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
์ด๋ค ์์ฒญ์ ๋ํ ๊ฒฐ๊ณผ๊ฐ ๋ฐ๋ก ๋์ค์ง ์์๋ ์ด๋ฅผ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ค๋ฅธ ์์ ์ ์์ํ ์ ์์ด, ์ฌ๋ฌ ์์ ์ ๋์์ ์ํํ ์ ์์ต๋๋ค.
๋๊ธฐ ๋ฐฉ์์ ์ค๊ณ๊ฐ ๋งค์ฐ ๊ฐ๋จํ๊ณ ์ง๊ด์ ์ด์ง๋ง ๊ฒฐ๊ณผ๊ฐ ์ฃผ์ด์ง ๋๊น์ง ๋ค์ ์์ ์ ์งํํ์ง ๋ชปํ๊ณ ๋๊ธฐํด์ผ ํ๋ ๋จ์ ์ด ์๊ณ ,
๋น๋๊ธฐ ๋ฐฉ์์ ๋๊ธฐ๋ณด๋ค ๋ณต์กํ์ง๋ง ๊ฒฐ๊ณผ๊ฐ ์ฃผ์ด์ง๋๋ฐ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋๋ผ๋ ๊ทธ ์๊ฐ ๋์ ๋ค๋ฅธ ์์ ์ ํ ์ ์์ผ๋ฏ๋ก ์์์ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค.
์ RxSwift๋ฅผ ์ฌ์ฉํ ๊น?
์์ ๊ฐ์ด RxSwift๋ ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ API์ ๋๋ค.
๊ทธ๋ฐ๋ฐ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ ๊ธฐ์กด Swift์์๋ Dispatch Queue๋ฅผ ์ฌ์ฉํ์ฌ ์ฒ๋ฆฌํ ์๋ ์๊ณ , PromiseKit์ด๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํด์๋ ํ ์ ์์ต๋๋ค.
๋ค์ํ ๋น๋๊ธฐ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ ์ค RxSwift๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ ๋ฌด์์ผ๊น์?
๋น๋๊ธฐ์ ์ฒ๋ฆฌ๋ฅผ ์ข ๋ ๊ฐ๊ฒฐํ ์ฝ๋๋ก ํ๊ธฐ ์ํด์! ๋ผ๊ณ ๊ฐ๋จํ ์์ฝํ ์ ์์ ๊ฒ ๊ฐ์๋ฐ์,
RxSwift์ ์ฅ์ ์ ๋ํด ์ข ๋ ์์ธํ ์์๋ด ์๋ค!
1. ๋น๋๊ธฐ๋ฅผ ๋๊ธฐ์ฒ๋ผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ๋น๋๊ธฐ๋ callback์ ๋ฐ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํฉ๋๋ค. Swift์์๋ @escaping ๋ฑ์ ์ด์ฉํฉ๋๋ค.
๋น๋๊ธฐ๊ฐ ์ค์ฒฉ์ด๋๋ฉด ๊ต์ฅํ ๋ณต์กํ ๊ตฌ์กฐ๊ฐ ๋๋๋ฐ, RxSwift๋ฅผ ์ด์ฉํด ๋น๋๊ธฐ์ ์ฒ๋ฆฌ๋ฅผ ํ๋ฉด, ๋น๋๊ธฐ์ ์ผ๋ก ์๊ธฐ๋ ๊ฒฐ๊ณผ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผreturn ๊ฐ์ผ๋ก ์ ๋ฌํ๋ ๊ฒ์ด ๊ฐ๋ฅํ์ฌ @escaping ์์ด ์ด๋ ํ ํ์
์ผ๋ก ๋ฆฌํด ๋ฐ์ ํ๋์ ์ธ์คํด์ค๋ก ์ฌ์ฉํ ์ ์๋๋ก ํด์ค๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๊ตฌ์กฐ์ ์ธ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ค ์ ์์ต๋๋ค.
2. ์ผ๊ด์ฑ์ด ์๋ ๋น๋๊ธฐ ์ฝ๋๋ฅผ ํด๊ฒฐ
๊ธฐ์กด Swift์์ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ๊ธฐ ์ํด ์ด๋ค ๊ณณ์์๋ DispatchQueue, ์ด๋ค ๊ณณ์์๋ OperationQueue ์ด๋ ๊ฒ ์ํฉ์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ์ด์ผ ํ๋๋ฐ, RxSwift์ ์ฌ์ฉํ๋ฉด ํ๋์ ๋น๋๊ธฐ ์ฝ๋๋ก ๊ฐ๋ฐ์ด ๊ฐ๋ฅํฉ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ์ ์ฒด ์ฝ๋๊ฐ ๊น๋ํด์ง๋ค๋ ์ฅ์ ์ด ์๊ฒ ์ฃ ?
3. ํ์ฅ ๋ถ๊ฐ๋ฅํ ์ํคํ ์ฒ ํจํด์ ํด๊ฒฐ
2๋ฒ๊ณผ๋ ์ด์ด์ง๋ ๋ด์ฉ์ธ๋ฐ์, ์ผ๊ด์ฑ ์๋ ๋น๋๊ธฐ ์ฝ๋๋ฅผ ์ด์ฉํด ์๋ก ๋ค๋ฅด๊ฒ ๊ตฌํํ ๋ก์ง์ ์กฐํฉ์ด๋ ํ์ฅ์ ์ด๋ ค์ด ๋ถ๋ถ์ด ์์ต๋๋ค. ๊ทธ๋ฌ๋, RxSwift๋ฅผ ์ด์ฉํด ์ผ๊ด์ฑ์๋ ์ฝ๋๋ฅผ ์์ฑํ๊ฒ ๋๋ค๋ฉด ์ํคํ ์ฒ์ ํ์ฅ์ด ๊ฐ๋ฅํ๊ฒ ๋ฉ๋๋ค.
4. Thread ์ฒ๋ฆฌ๊ฐ ์ฌ์์ง๋๋ค.
๋ง์ฝ RxSwift๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค๋ฉด? A๋ผ๋ ๊ฐ์ ๋ฐ์์์ผ B๋ผ๋ ๊ฐ์ ๋ฐ์์ฌ ์ ์๊ณ , B๋ผ๋ ๊ฐ์ ๋ฐ์์์ผ C๋ผ๋ ๊ฐ์ ๋ฐ์์ฌ ์ ์๊ณ , C๋ผ๋ ๊ฐ์ ๋ฐ์์์ผ D๋ผ๋ ๊ฐ์ ๋ฐ์์ฌ ์ ์๋ ์ํฉ์์๋ ํํ ๋งํ๋ ์ฝ๋ฐฑ(CallBack) ์ง์ฅ์ด ์ฝ๋์ ๋ํ๋๊ฒ ๋ ์ ์์ต๋๋ค. ํ์ง๋ง RxSwift๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ์๋ก ๋ค๋ฅด๊ฒ ๊ตฌํํ ๋ก์ง์ ์กฐํฉํ๊ธฐ ์ฌ์์ง๊ธฐ ๋๋ฌธ์ ์ด ์ฝ๋ฐฑ ์ง์ฅ์์ ํ์ถํ ์ ์๊ฒ ๋ฉ๋๋ค. ๋ฐ๋ผ์ UI ์ด๋ฒคํธ, ๋คํธ์ํฌ ์ฒ๋ฆฌ ๋ฑ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐฑ์ ํ์ ๋์ ์ฒ๋ฆฌ๊ฐ ์ฌ์์ง๋๋ค. ๊ทธ๋งํผ ์ฝ๋๋ ๊น๋ํด์ง๊ฒ ์ฃ ?
์ฌ๊ธฐ๊น์ง RxSwift์ ๊ธฐ๋ณธ ๊ฐ๋ ๊ณผ ์ฌ์ฉ์ด์ ๊น์ง ์ ๋ฆฌํด๋ณด์๋๋ฐ์!
์์ผ๋ก RxSwift์ ๋ํด ํ๋์ฉ ์ฐจ๊ทผ์ฐจ๊ทผ ์ ๋ฆฌํด๋๊ฐ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค!
์๋กญ๊ฒ ๊ณต๋ถํ๋ฉฐ ์ ๋ฆฌํ๋ ๋ด์ฉ์ด๋ ํ๋ฆฐ ๋ด์ฉ์ด ์๋ค๋ฉด ๋๊ธ๋ก ์๋ ค์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค๐
[์ฐธ๊ณ ์๋ฃ]
https://www.youtube.com/watch?v=w5Qmie-GbiA&t=15s
https://kimsama.gitbooks.io/unirx/content/observable/
https://private.tistory.com/24
https://beenii.tistory.com/178
https://medium.com/@jang.wangsu/ios-swift-rxswift-์-์ฌ์ฉํ๋ฉด-์ข์๊น์-5c9995f47bab
'๐ iOS > RxSwift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[RxSwift] Traits - Driver, Signal, Control Property/ControlEvent (0) | 2023.04.29 |
---|---|
[RxSwift] Traits - Single, Completable, Maybe (0) | 2023.04.17 |
[RxSwift] Relay๋? (0) | 2023.02.17 |
[RxSwift] Subject๋? (0) | 2023.02.03 |
[RxSwift] Observable (0) | 2022.05.02 |