ย ReactiveX
ReactiveX(RX)๋ ํฌ๊ฒ 3๊ฐ์ง ์์๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
โต ์ผ๋ จ์ ๊ฐ๋ค์ ๋ฐํํด๋ด๋ Observable
โถ ์ฐ์์ ์ธ ๊ฐ๋ค์ด ํ๋ฌ๊ฐ๋ Stream์์ Pipe ์ญํ ์ ํ๋ Operator
โท Pipe๋ง ์ณ๋ค๋ณด๋ฉฐ ๊ฐ์ ๊ธฐ๋ค๋ฆฌ๋ค๊ฐ ๋ฌด์ธ๊ฐ๊ฐ ๋์ค๋ฉด ์์
์ ์งํํ๋ Observer
3๊ฐ์ง ์์๋ฅผ ๋ก๋ด ๊ณต์ฅ์ผ๋ก ์ค๋ช
ํด๋ณผ๊ฒ์.
Observable์ ๊ฐ์ ์ฐ์ด๋ด์ Stream ์์ ์ฌ๋ ค์ฃผ๋ ๊ธฐ๊ณ์
๋๋ค. Observable์ ๋ค์ด์จ ๋ฐ์ดํฐ๋ฅผ Stream, โํ๋ฆโ ์ ํ๋ ค๋ณด๋
๋๋ค. ์ฌ๊ธฐ์ Stream์ ์ปจ๋ฒ ์ด์ด ๋ฒจํธ๋ผ๊ณ ๋ถ๋ฅผ๊ฒ์.
์ฐ๋ฆฌ๋ Observable์ด๋ผ๋ ๊ธฐ๊ณ์์ ์ฐ์ด๋ธ ๋ฐ์ดํฐ ๋ก๋ด์ Stream์ด๋ผ๋ ์ปจ๋ฒ ์ด์ด ๋ฒจํธ์ ์ฌ๋ ค์ฃผ๊ฒ ๋ฉ๋๋ค.
Observable ๊ธฐ๊ณ์์ ์ฐ์ด๋ธ ๋ฐ์ดํฐ ๋ก๋ด๋ค์ ์ปจ๋ฒ ์ด์ด ๋ฒจํธ๋ฅผ ํ๊ณ ์ด๋ํ๊ฒ ๋ฉ๋๋ค.
์ด๋ ์ค์ filter ๋ผ๋ Operator๋ฅผ ๋ง๋๊ฒ ๋ฉ๋๋ค. ํด๋น Operator๋ ์ด๋ฆ ๊ทธ๋๋ก, ๋ฐ์ดํฐ ๋ก๋ด๋ค์ ๊ฑธ๋ฌ๋ด๋ ์ญํ ์ ํฉ๋๋ค. ์ฐ๋ฆฌ๊ฐ ๋ง๋ filter ๋ ์๊น์ ๊ฑธ๋ฌ๋ด๋ ์ญํ ์ ํฉ๋๋ค.
filter ํ์ดํผ๋ก ๊ฑธ๋ฌ์ง ๋ฐ์ดํฐ ๋ก๋ด์ map ์ด๋ผ๋ Operator๋ฅผ ๋ง๋ฉ๋๋ค. ํด๋น Operator ์์ ์๋ ํฌ์ฅํ๊ธฐ ๋ฉ์๋๋ก ์ธํด์ ๋ฐ์ดํฐ ๋ก๋ด์ ํฌ์ฅ๋ฉ๋๋ค.
Observable์ ์ํด์ ๋ง๋ค์ด์ง๊ณ Operator์ ์ํด์ ๊ฑธ๋ฌ์ง๊ณ ๊พธ๋ฉฐ์ง ๋ฐ์ดํฐ ๋ก๋ด์ ํด๋น ๊ณต์ฅ์์ ๋์ค๋ ์ ํ์ ๊ธฐ๋ค๋ฆฌ๊ณ ์๋ Observer์๊ฒ ๊ฐ๋๋ค. Observer๋ ์์ ์ด ๊ฐ์ง๊ณ ์๋ ๊ฐ๋ฐฉ์ ํด๋น ์ ํ์ ๋ฐ๊ธธ ์ํฉ๋๋ค.
Rx๋ ๋ฐ์ดํฐ๋ฅผ ํ๋์ ํ๋ฆ์ผ๋ก ํ๋ ค๋ณด๋ด๋ฉด์ ์ค๊ฐ ์ค๊ฐ Operator๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ๊พธ๋ฉฐ์ฃผ๊ฑฐ๋ ๊ฑธ๋ฌ๋ด๊ธฐ๋ ํ๋ฉด์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๊ธธ ์ํ๋ ๋๊ตฐ๊ฐ์๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํด์ค๋๋ค.
๊ทผ๋ฐ, Operator๊ฐ์ ๊ฒฝ์ฐ์๋ ๊ธฐ๋ณธ์ ์ธ ์ปดํจํฐ ์ธ์ด์์ ์ ๊ณตํด์ค๋๋ค. Rx๋ฅผ ์ฌ์ฉํ์ง ์๋๋ผ๋ map, filter ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ ๊ฐ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ฉด, Rx๋ ๋ฌด์จ ์ด์ ์ด ์๋๊ฑด๊ฐ์?
1์ฐจ์์ ์ธ ๊ฐ๋ฟ๋ง ์๋๋ผ ์๊ฐ์ ํ๋ฆ, ์ฌ์ฉ์์ ๋์, ๋คํธ์ํฌ ์์ฒญ์ ๊ฒฐ๊ณผ๋ฅผ ์ ๋ถ Stream์ผ๋ก ๋ง๋ค์ด์ ๋ณด๋ผ ์ ์์ต๋๋ค.
Integer, String๋ฑ์ ํ์
๋ง๊ณ ๋ ์ฌ์ฉ์๊ฐ ๋ฒํผ์ ํญํ ๊ฒฝ์ฐ, ์ฌ์ฉ์๊ฐ ์คํฌ๋กค์ ํ์ ๋๊ฐ์ ์ฌ์ฉ์์ ๋์๋ Stream์ ๋ด์์ ๋ณด๋ผ ์ ์์ต๋๋ค. ๋ํ, Operator๋ฅผ ์ฌ์ฉํด์ ๊ทธ ๊ฐ์ ๊ฐ๊ณตํ ์๋ ์๋๊ฑฐ์ฃ .
Stream์ ํตํด์ ๋์ค๋ ๊ฐ์ ํด๋น Observable๋ฅผ ๊ตฌ๋
ํ๊ณ ์๋ Observer๊ฐ ์ฒ๋ฆฌํฉ๋๋ค. ์์์ Stream์ ํตํด์ โ๊ฐ์ด ๋์ค๋ฉด ํด๋น ๊ฐ์ ๊ฐ๋ฐฉ์ ๋ฃ์ด๋ผโ ์ฒ๋ผ ์์ ์ ์ํฉ์ ๋ง๊ฒ๋ ์ฒ๋ฆฌํฉ๋๋ค.
Rx๊ฐ์ด ๋ฐ์ดํฐ์ ํ๋ฆ๊ณผ ๋ณ๊ฒฝ ์ฌํญ์ ์ ํ์ ์ค์ ์ ๋ ์ ์ธ์ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ ๋ฐ์ํ ํ๋ก๊ทธ๋๋ฐ์ด๋ผ๊ณ ํฉ๋๋ค.
ย ๋ฐ์ํ ํ๋ก๊ทธ๋๋ฐ
๋ฐ์ํ ํ๋ก๊ทธ๋๋ฐ์์๋ ๊ฐ์ด ๋ณ๊ฒฝ๋์์ ๋, ํ
ํ๋ฆฟ์ ์ ์ธํด๋๋๋ก ์์์ ํ๋ฉด์ด ๋ ๋๋ง๋ฉ๋๋ค.
์ด์ ์๋ ๋ ๋๋ง ์์ ์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ๋ถ๋ฌ์์ ํ๋ฉด์ ์ถ๋ ฅํ์ต๋๋ค. ํ์ง๋ง, ๋ฐ์ํ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ ๊ฒฝ์ฐ์๋ ๋ฏธ๋ฆฌ ์ ์ธ๋์ด ์๋ ๊ตฌ์กฐ์์ ๊ฐ์ด ๋ณํํ๋ฉด ํ
ํ๋ฆฟ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํฉ๋๋ค.
์ฆ, ์ด์ ์๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ ํ๋ฉด์ ๋ง๋ค์๋ค๋ฉด, ํ์ฌ๋ ๋ฌด์์ ํ ์ง ์ ์ธํ์ฌ ๋ณ๊ฒฝ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์งํ๊ณ ์ ํํฉ๋๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์, ๋ฐ์ํ ํ๋ก๊ทธ๋๋ฐ์ ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ์ํ๊ธฐ ์ํด์ ํ์ํฉ๋๋ค.
๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ์ํ๋ ๊ฒ์ ์ค์ํฉ๋๋ค. ํ๋ฉด์ด ์ฌ์ฉ์์ ์๋๋ก ์ด๋ป๊ฒ ๋์ํ ์ง ์์ธก ๋ถ๊ฐํ๊ณ , ์๋ฒ์ ์๋ต์ด ์ธ์ ์ด๋ป๊ฒ ์ฌ ์ง ์์ธก ๋ถ๊ฐํ ์ํฉ์์ ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ์ ๋ค๋ฃฐ ์ค ์๋ค๋ฉด ์์ธก ๋ถ๊ฐํ ์ํฉ์ ์ ํค์ณ๋๊ฐ ์ ์์ต๋๋ค.
ํ์ง๋ง, ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ์ด๋ ต์ต๋๋ค.
๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ํ๊ฒ ๋๋ฉด ์์ฑํ ์ฝ๋๊ฐ ์์๋๋ก ๋์ํ์ง ์์ต๋๋ค. ์ธ์ ์คํ๋ ์ง ์์ธกํ ์ ์๊ณ , ํธ์ถํ ์์๋ก ๋์ํ๋ค๋ ๋ณด์ฅ๋ ์์ต๋๋ค. ๋ํ, ํธ์ถ ๋น์ ๊ฐ, ์ค์ ์คํ๋์์ ๋ ๊ฐ์ด ๊ทธ๋๋ก๋ผ๊ณ ๋ณด์ฅํ ์๋ ์์ต๋๋ค.
์์ธกํ ์ ์๋ ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ด ๋ณตํฉ์ ์ผ๋ก ์กด์ฌํ๋ค๋ฉด ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ๋ ํ๋ค์ด์ง๊ฒ๋๋ค. ์๋ฅผ ๋ค์ด์, ์ฌ์ฉ์๊ฐ ์นด์นด์ค ๋ก๊ทธ์ธ ๋ฒํผ์ ๋๋ ๋ค๊ณ ํด๋ด
์๋ค. ๋ฒํผ์ ๋๋ฅด๋ฉด ์นด์นด์ค ์๋ฒ์ ํด๋น ์ฌ์ฉ์๊ฐ ์ ํจํ ์ฌ์ฉ์์ธ์ง ํ์ธํฉ๋๋ค. ์์ฒด ์๋ฒ์์ ํ ๋ฒ ๋ ํด๋น ์ฌ์ฉ์๊ฐ ์ ํจํ ์ฌ์ฉ์์ธ์ง ํ์ธํฉ๋๋ค. ๋ ์๋ฒ ๋ชจ๋์์ OK์ธ ์ํฉ์ด๋ผ๋ฉด ๋ก๊ทธ์ธ์ ์์ผ์ฃผ๋ ๋ก์ง์ ์ง ๋ค๊ณ ํด๋ด
์๋ค.
๋ฒํผ์ ๋๋ ์ ๋ ์นด์นด์ค ์๋ฒ์ ์์ฒด ์๋ฒ ๋ชจ๋์ ๋น๋๊ธฐ์ ์ผ๋ก ์ ํจํ ์ฌ์ฉ์์ธ์ง ํ์ธ์ ํ๊ณ , ๋ฐํ๋๋ ๊ฐ์ด OK์ธ์ง ํ์ธํด์ ๋ก๊ทธ์ธ ์๋ฃ ์ฒ๋ฆฌํ ํ์ ์ฑ์ ์
์ฅํ ์ ์๊ฒ๋ ํ๋ ๋ก์ง, ์๊ฐ๋ง ํด๋ ๋ณต์กํ์ง ์๋์?
์ด๋ฐ ์ํฉ์์ ์ด๋ฒคํธ ๋ฆฌ์ค๋์ ๊ด์ ์์ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ค๋ฉด ์ด๋ ค์์ด ํด๊ฒฐ๋ฉ๋๋ค.
๋ฐ์ํ ํ๋ก๊ทธ๋๋ฐ์ ๋ฐ์ดํฐ ํ๋ฆ๊ณผ ๋ณ๊ฒฝ์ฌํญ ์ ํ์ ์ค์ ์ ๋ ์ ์ธ์ ํ๋ก๊ทธ๋๋ฐ์ด๋ผ๊ณ ํ์ต๋๋ค. ๋ชจ๋ ๊ฒ์ Stream์ผ๋ก ๊ฐ์ฃผํ๊ณ ์ ์ธ์ ์ผ๋ก ๊ฐ๋ฐ์ ํ๋๊ฑฐ์ฃ .
๋น๋๊ธฐ๋ฅผ ์กฐ๊ธ ๋ ๊ฐ๊ฒฐํ๊ฒ ๋ฐ๋ผ๋ณผ ์ ์๋ ๊ด์ ์ด ์ ๊ณต๋ฉ๋๋ค.
RxSwift๋ก ์์ ์ํฉ์ ์์ฑํ๋ค๊ณ ํ์ ๋, Rx๋ ์ฌ์ฉ์์ ๋์๋ง์ ๋ Stream์ผ๋ก ๋ง๋ค์ด์ ๋ณด๋ผ ์ ์๊ธฐ์ ์ฌ์ฉ์๊ฐ ์นด์นด์ค ๋ก๊ทธ์ธ ๋ฒํผ์ ๋๋ ๋ค๋ ๋์์ Stream์ผ๋ก ๋ณด๋ผ๊ฒ๋๋ค.
kakaoLoginButton.rx.tap
Swift
๋ณต์ฌ
๊ทธ๋ฆฌ๊ณ , ์ฌ์ฉ์์ ์ ๋ณด๊ฐ ์ ํจํ์ง์ ๋ํ ๊ฐ์ ๋ฐ์์, ๋ ๋ค True ๊ฐ์ด ๋ค์ด์ค๋์ง ํ์ธํ๊ฒ ์ฃ .
.filter { kakaoAPI.checkUser() && appAPI.checkUser() }
Swift
๋ณต์ฌ
ํด๋น ํํฐ์์ ๊ฑธ๋ฌ์ง์ง ์์๋ค๋ฉด ์ ํจํ ์ฌ์ฉ์์ด๊ธฐ ๋๋ฌธ์ ๋ฉ์ธ ํ๋ฉด์ผ๋ก ๋์ด๊ฐ ์ ์์ ๊ฒ๋๋ค.
.subscribe { _ in
presentMainScreen()
}
Swift
๋ณต์ฌ
๋ณด์๋ค์ํผ, Rx์ ํ๋ฆ์ ํ ๋ฐฉํฅ์ ํ์ดํ๋ก ๋ํ๋ผ ์ ์์ต๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์, ๋น๋๊ธฐ ํ๋ฆ์ ๋จ์ํ ํํ๋ก ๋ฐ๋ผ๋ณผ ์ ์๊ฒ ๋๋๊ฑฐ์ฃ . ์ดํดํ๊ธฐ ์ฝ์ต๋๋ค.
๋ํ, ์ ์ธํ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ผ๋ก ์ฝ๋๊ฐ ์์ฑ๋์ด ์์ด์ ๊ฐ ๋ถ๋ถ์ด ์๋ก๋ฅผ ์์ง ๋ชปํด๋ ๊ด์ฐฎ๊ณ , ๋ณ์๋ก ์ธํด์ ์ค๋ฅ๊ฐ ๋ ์ํ์ด ์ ์ต๋๋ค.
ย ํจ์ํ ํ๋ก๊ทธ๋๋ฐ
ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์ ์์ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ๊ณผ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ ๋ํ ๋ด์ฉ์ ์กฐ๊ธ ๋ ์์ธํ ์์ฑํด๋์ต๋๋ค. ํด๋น ํฌ์คํ
์ ๋ณด๊ณ ๋์ ๋๋จธ์ง ๋ด์ฉ์ ๋ณด๋๊ฑธ ์ถ์ฒ๋๋ฆฝ๋๋ค.
ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ์ค๋ฅ๋ฅผ ๋ง๋ค์ด๋ด๋ ๋ณ์์ ์ฌ์ฉ์ ์ง์ํฉ๋๋ค. ๋ฐ๋ผ์, ์์ ํจ์๋ฅผ ์ฌ์ฉํด์ ํ๋ก๊ทธ๋๋ฐ์ ํ๊ฒ ๋ฉ๋๋ค. ์์ ํจ์๋ ๊ฐ์ ์
๋ ฅ์ ๋ฃ์์ ๋, ํญ์ ๊ฐ์ ์ถ๋ ฅ ๊ฐ์ ๋ด๋ณด๋ด๋ ํจ์๋ก ์ธ๋ถ์ ๋ณ์๋ฅผ ์ฌ์ฉํ์ง ์์ต๋๋ค.
์ธ๋ถ์ ๋ณ์๋ฅผ ์ฌ์ฉํ์ง ์์ผ๋ฉด ๋ณ์๋ก ์ธํด์ ํจ์๊ฐ ์์ธกํ์ง ๋ชปํ ๊ฐ์ ๋ฆฌํดํ์ง ์๊ธฐ ๋๋ฌธ์ Side-effect๊ฐ ์ฌ๋ผ์ง๋๋ค. ํ๋ก๊ทธ๋๋จธ์ ์ฐฉ์ค๋ก ์ธํ ์ค๋ฅ, ์ค๋ ๋ ๋์ ์ ๊ทผ์ ์ํ ์ค๋ฅ, ๊ต์ฐฉ ๋ฌธ์ ๋ก๋ถํฐ ์์ ๋ก์ด ํ๋ก๊ทธ๋๋ฐ์ด ๊ฐ๋ฅํด์ง๊ฒ ๋ฉ๋๋ค.
Rx๋ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ๊ธฐ๋ณธ ๊ณจ๊ฒฉ์ ๊ฐ์ถ๊ณ ์์ต๋๋ค.
์์
์ ์งํํ๋๋ฐ ์์ด์ ๋จ ํ๋์ ๋ณ์๋ ์ฌ์ฉํ์ง ์๊ณ , subscribe ์ฝ๋๋ฅผ ์ ์ธํ๊ณ ๋ ์ค์ง ํ๋ฆ์ ์์ฑํ๊ณ ์กฐ๋ฆฝํด์ ์์๋ก ์ ์ธํ๋ ๊ฒ๋ง์ผ๋ก ์ฝ๋๊ฐ ๊ตฌ์ฑ๋์ด ์๊ธฐ ๋๋ฌธ์ด์ฃ .
๋ํ, ๊ฐ ๋ถ๋ถ์ด ์๋ก๋ฅผ ์์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ๋ถ๋ถ์ด ๋ณ๊ฒฝ๋ ๋ ๋ฐ๋ ์ํฅ์ด ์ต์ํ๋ฉ๋๋ค.
๊ฐ๋
์ฑ, ์ฌ์ฌ์ฉ์ฑ, ๋
๋ฆฝ์ฑ, ์ ์ง๋ณด์์ฑ ๋ฉด์์ ์ข์ ์ฝ๋๋ผ๊ณ ๋ณผ ์ ์๋๊ฒ๋๋ค.