๐ iOS/RxSwift (6) ์ธ๋ค์ผํ ๋ฆฌ์คํธํ [RxSwift] Traits - Driver, Signal, Control Property/ControlEvent ์๋ ํ์ธ์ ์ ์ธ์ ๋๋ค :) ์ง๋ ๊ฒ์๊ธ์ ์ด์ด ์ด๋ฒ ๊ฒ์๊ธ์์๋ RxCocoa์ Traits์ ๋ํด ์ ๋ฆฌํด๋ณด๊ฒ ์ต๋๋ค. ์ด๋ฒ ๊ฒ์๊ธ๋ ReactiveX/RxSwift์ Traits ๋ฌธ์ ๋ฒ์ญ์ ํตํด ์์ฑํ๊ฒ ์ต๋๋ค! RxCocoa Traits์ ์ข ๋ฅ RxCocoa์ Traits๋ก๋ Driver, Signal, Control Property/ControlEvent๊ฐ ์์ต๋๋ค. ํ๋์ฉ ์ดํด๋ณด๊ฒ ์ต๋๋ค! Driver Driver๋ ๊ฐ์ฅ ์ ๊ตํ trait์ ๋๋ค. UI ๊ณ์ธต์์ reactive ์ฝ๋๋ฅผ ์์ฑํ๋ ์ง๊ด์ ์ธ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๊ฑฐ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ๋(driving)ํ๋ ๋ฐ์ดํฐ ์คํธ๋ฆผ์ ๋ชจ๋ธ๋งํ๋ ค๋ ๋ชจ๋ ๊ฒฝ์ฐ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. + Driver๋ผ๋ ์ด๋ฆ์ด ๋ถ์ ์ด์ ? Driver์ ๋ชฉ์ ์์ฒด๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ.. [RxSwift] Traits - Single, Completable, Maybe ์๋ ํ์ธ์ ์ ์ธ์ ๋๋ค! ์ค๋์ Traits๊ฐ ๋ฌด์์ธ์ง์ ๋ํด ์์๋ณด๊ณ , RxSwift์ Traits์ ๋ํด ์ ๋ฆฌํด๋ณด๊ฒ ์ต๋๋ค. (RxCocoa์ Traits๋ ๋ค์ ๊ฒ์๊ธ์์ ์ด์ด์ ์ ๋ฆฌํ๋๋ก ํ ๊ฒ์!) ์ด๋ฒ ๊ฒ์๊ธ์ ReactiveX/RxSwift์ Traits ๋ฌธ์๋ฅผ ๋ฒ์ญํ๋ฉด์ Traits์ ๋ํด ์ ๋ฆฌํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. Traits๋? Swift๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ํ์ฑ๊ณผ ์์ ์ฑ์ ํฅ์์ํค๊ณ Rx ์ฌ์ฉ์ ๋ณด๋ค ์ง๊ด์ ์ด๊ณ ๊ฐ๋จํ๊ฒ ๋ง๋๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ๊ฐ๋ ฅํ ์ ํ ์์คํ ์ ๊ฐ์ถ๊ณ ์์ต๋๋ค. Traits๋ ์ธํฐํ์ด์ค ๊ฒฝ๊ณ๋ฅผ ๋์ด ๊ด์ฐฐ ๊ฐ๋ฅํ ์ํ์ค ์์ฑ์ ์ ๋ฌํ๊ณ ๋ณด์ฅํ๋ ๋ฐ ๋์์ด ๋ ๋ฟ๋ง ์๋๋ผ ๋ชจ๋ ์ปจํ ์คํธ์์ ์ฌ์ฉํ ์ ์๋ ์์ Observable๊ณผ ๋น๊ตํ ๋ ๋ฌธ๋งฅ์ ์ธ ์๋ฏธ๋ฅผ ์ ๊ณตํ๊ณ ๋ ๊ตฌ.. [RxSwift] Relay๋? ์๋ ํ์ธ์ ์ ์ธ์ ๋๋ค :) ์ ๋ฒ Rx ๊ฒ์๊ธ์ด์๋ Subject์ ์ด์ด Relay์ ๋ํด์๋ ํ ๋ฒ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํฉ๋๋ค. ์ด๋ฒ์๋ RxSwift: Reactive Programming with Swift ์ฑ ์ ์ฐธ๊ณ ํด์ ์ ๋ฆฌ๋ฅผ ํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค! Subject์ ๋ํด ์ ๋ชจ๋ฅด์๊ฒ ๋ค๋ฉด ์๋์ ๊ฒ์๊ธ์ ๋จผ์ ์ฝ๊ณ ์ค์๋ ๊ฒ์ ์ถ์ฒ๋๋ฆฝ๋๋ค. [RxSwift] Subject๋? ์๋ ํ์ธ์ ์ ์ธ์ ๋๋ค : ) ์ฐธ ์ค๋๋ง์ RxSwift ๊ฒ์๊ธ ์ฐ๊ฒ ๋์์ต๋๋ค.. ๋ฌธ ๋ซ์๊ฑฐ ์๋๊ตฌ์ ์ ์์์ ํ๋ ค๊ตฌ์.. ๋ค.. ์ฌ์ค ๊ทธ๋์ RxSwift ๊ณต๋ถ๋ฅผ ์์ ์ํ ๊ฒ์ ์๋๋ฐ์.. ๋ญ๊ฐ ๊ฒ์๊ธ์ ์ธ ๋ janechoi.tistory.com Relay๋? Relay๋ Subject์ Wrapper ํด๋์ค๋ก, RxCocoa ๋ด๋ถ์.. [RxSwift] Subject๋? ์๋ ํ์ธ์ ์ ์ธ์ ๋๋ค : ) ์ฐธ ์ค๋๋ง์ RxSwift ๊ฒ์๊ธ ์ฐ๊ฒ ๋์์ต๋๋ค.. ๋ฌธ ๋ซ์๊ฑฐ ์๋๊ตฌ์ ์ ์์์ ํ๋ ค๊ตฌ์.. ๋ค.. ์ฌ์ค ๊ทธ๋์ RxSwift ๊ณต๋ถ๋ฅผ ์์ ์ํ ๊ฒ์ ์๋๋ฐ์.. ๋ญ๊ฐ ๊ฒ์๊ธ์ ์ธ ๋ ํ์คํ ์ ๋ณด๋ฅผ ์ ๋ฌํด์ผํ๋ค๋ ์๊ฐ์ ์ข ๋ ๊ณต๋ถํ๊ณ ์ ๋ฆฌํด์ ์ฌ๋ฆฌ์ ์ข ๋ ํ๊ณ ... ํ๋ค๊ฐ ์ด๋ ๊ฒ ๋ฏธ๋ฃจ๊ฒ ๋ ๊ฒ ๊ฐ๋ค์ ํํซ ์ด์ ๋ ์ด์ ๋ฏธ๋ฃฐ ์ ์๋ค! ๋ง์ด ๋ถ์กฑํด๋ ๊ธ๋ก ์ ๋ฆฌํ๋ฉด์ ํ์คํ ์ดํดํ๋ ๋ถ๋ถ๋ค์ด ๋ง์ ๊ฒ ๊ฐ๊ธฐ๋ ํ๊ณ , ์ต๊ทผ์ ํ๋ก์ ํธ์์ RxSwift๋ฅผ ์ด์ฉํด ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ํ ์ผ์ด ๋ง์๋ฐ ์ ํํ ์์ง ๋ชปํ๋ ๋ถ๋ถ์ด ๋ง๋ค๊ณ ๋๊ผ์ต๋๋ค.. ๊ทธ๋์ ์ ๋๋ก ์๊ณ ์ฝ๋๋ฅผ ์ง๊ณ ์ถ์ด์ ๋ค์ RxSwift ๊ณต๋ถ๋ฅผ ์ด์ฌํํ๋ฉฐ ํฐ์คํ ๋ฆฌ์๋ ์ ๋ฆฌ๋ฅผ ํด๋ณด๋ ค๊ณ ํฉ๋๋ค! ๋ง์ง๋ง์ผ๋ก Observabl.. [RxSwift] Observable RxSwift ๊ฐ๋ ์ ๋ฆฌ๊ธ์์ RxSwift์ ์ ์์ ๋ํด ์ ๋ฆฌํด๋ณด๋ฉฐ, Observable์ด ๋ฐ์ํ(Reactive) ํ๋ก๊ทธ๋๋ฐ์ ๊ฐ์ฅ ํฐ ํต์ฌ์ด๋ค. ๋ผ๊ณ ์ ๋ฆฌํ์ต๋๋ค. ๊ทธ๋ ๋ค๋ฉด ์ด ์ค์ํ ๊ฐ๋ ! Observable์ด ๋ฌด์์ธ์ง, ์ด๋ป๊ฒ ๋ง๋๋์ง, ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง์ ๋ํด์ ์ข ๋ ์์ธํ ์์๋ด ์๋ค! Observable Observable์ ๊ฐ๋ ๋ถํฐ ๋ค์ ๊ฐ์ ธ์์ ์ค๋ช ํด๋ณด์๋ฉด, ReactiveX์์ Observable ๊ฐ์ฒด๋ ์ฌ์ ์ ์ธ ์๋ฏธ๋๋ก ์ด๋ค '๊ฐ์ฒด'๋ฅผ ๊ด์ฐฐํ ์ ์๋ ํํ๋ก ๋ง๋๋ ๊ฒ์ ๋งํ๋ฉฐ, Observable ๊ฐ์ฒด๋ฅผ ์์ฑํจ์ผ๋ก์จ Observer๋ ๊ด์ฐฐ์ ์์(๊ตฌ๋ )ํ๊ฒ ๋ฉ๋๋ค. ์ด '๊ฐ์ฒด'์ ๋ฐ๋ผ ์ค์ ๊ด์ฐฐํ๋ ๊ฐ(== ์คํธ๋ฆผ์ ํ๋ ค๋ณด๋ด๋ ๊ฐ) ํน์ ๊ด์ฐฐ์ ๋์์ธ ์ฌ๊ฑด(== ์ด๋ฒคํธ)์ด ๊ฒฐ์ ๋ฉ๋.. [RxSwift] RxSwift์ ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ ์๋ ํ์ธ์! ์ ์ธ์ ๋๋ค :) ์์ฆ ๋น๋๊ธฐ์ ์ฒ๋ฆฌ์ ๋ํ ํ์์ฑ์ ๋๋ผ๊ณ , ์ํคํ ์ฒ ๊ณต๋ถ๋ ์์ํ๋ค ๋ณด๋ ์์ฐ์ค๋ฝ๊ฒ RxSwift์ ๊ด์ฌ์ด ์๊ฒจ ๊ณต๋ถ๋ฅผ ํด๋ณด๊ณ ์๋๋ฐ์! RxSwift์ ๊ธฐ๋ณธ ๊ฐ๋ ๋ถํฐ ์ฐจ๊ทผ์ฐจ๊ทผ ์ ๋ฆฌํด๋๊ฐ๋ ค๊ณ ํฉ๋๋ค! RxSwift๋? RxSwift๋ Reactive eXtension + Swift์ ํฉ์ฑ์ด๋ก ์ด๋ฃจ์ด์ง ์ฉ์ด๋ก, Swift์ ReactiveX๋ฅผ ์ ์ฉ์์ผ ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ์ง๊ด์ ์ผ๋ก ์์ฑํ ์ ์๋๋ก ๋์์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ReactiveX๋ ๋ฌด์์ผ๊น์?๐ค ReactiveX ๊ณต์ ํํ์ด์ง์ ๋ฐ๋ฅด๋ฉด ReactiveX๋, An API for asynchronous programming with observable streams '์ต์ ๋ฒ๋ธ ์คํธ๋ฆผ์ผ๋ก ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ .. ์ด์ 1 ๋ค์