๐ 1 . Observable = Observable sequence = sequence
RsSwift์์ ๋งํ๋ Observable๊ณผ sequence๋ ์๊ฐ์ ๋ฐ๋ผ ์์ฐจ์ ์ผ๋ก ๋ฐ์ํ๋ ๋ฐ์ดํฐ์ ํ๋ฆ์ ๋งํ๋ค.
- Observable
: RxSwift์ ํต์ฌ ๊ฐ๋ ์ค ํ๋๋ก, ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ๊ฐ์ด๋ ์ด๋ฒคํธ๋ฅผ ๋ฐฉ์ถํ๋ ๋ฐ์ดํฐ ํ๋ฆ(์คํธ๋ฆผ)์ ๋ํ๋. ์ด ์คํธ๋ฆผ์ ๊ตฌ๋ ํจ์ผ๋ก์จ ๊ฐ์ด ๋ณ๊ฒฝ๋ ๋ ๋ง๋ค ํด๋น ๊ฐ์ ๋ฐ์ ์ ์์. - Sequence
: ์ผ๋ฐ์ ์ผ๋ก Swift์์๋ ๋ฐ๋ณต๊ฐ๋ฅํ ๊ฐ์ ์งํฉ(์: ๋ฐฐ์ด, ๋ฆฌ์คํธ ๋ฑ)์ ์๋ฏธํจ.
RxSwift์์์ ์ํ์ค๋ ๊ฐ๋ค์ด ์๊ฐ์ด ํ๋ฆ์ ๋ฐ๋ผ ํ๋์ฉ ๋์ค๋ ๋น๋๊ธฐ์ ์ธ ์ํ์ค๋ฅผ ์๋ฏธํจ.
์ด ์คํธ๋ฆผ์ ๋ฐฐ์ด์ฒ๋ผ ์ฌ๋ฌ ๊ฐ์ ๋ฐฉ์ถํ์ง๋ง, ๊ทธ ๊ฐ๋ค์ ์๊ฐ์ ๋ฐ๋ผ ๋น๋๊ธฐ์ ์ผ๋ก ์ ๋ฌ๋จ.
์ต์ ๋ฒ๋ ์ต์ ๋ฒ๋ธ์ ๊ตฌ๋ ํ๋ค.
์ต์ ๋ฒ๋ธ์ด ๋ฐฉ์ถํ๋ ํ๋ ๋๋ ์ฐ์๋ ํญ๋ชฉ์ ์ต์ ๋ฒ๋ ๋ฐ์ํ๋ค.
์ต์ ๋ฒ๋ธ์ ์ด๋ฒคํธ๋ฅผ ๋ฐํ(์ ๋ฌ)ํ๊ณ ,
์ต์ ๋ฒ(๊ตฌ๋ ์)๋ ์ต์ ๋ฒ๋ธ์ ๊ฐ์(๊ตฌ๋ )ํ๊ณ ์๋ค๊ฐ ๊ทธ ์ด๋ฒคํธ์ ๋ฐ์ํ๋ ๊ตฌ์กฐ
์ต์ ๋ฒ๋ธ์ ๋จ์ํ ๋ฐ์ดํฐ ํญ๋ชฉ๋ง ๋ฐฉ์ถํ๋ ๊ฒ์ด ์๋๋ผ,
์ต์ ๋ฒ๋ธ์์ ๋ฐ์ํ ์๋ก์ด ์ด๋ฒคํธ๋ next, error, completed ์ธ๊ฐ์ง ํ์ ์ ์ด๋ฒคํธ๋ฅผ ๋ฐฉ์ถํ ์ ์๋ค.
์ผ๋ฐ์ ์ผ๋ก next๋ก ์ ๋ฌ๋ ์ด๋ฒคํธ๋ ๋ฐฉ์ถ์ด๋ผ ํํํ๊ณ ,
error์ completed๋ notificaion์ด๋ผ๊ณ ํํํ๋ค.
- next: ์ต์ , ๋ค์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ์ด๋ฒคํธ
- completed: ์ฑ๊ณต์ ์ผ๋ก ์ด๋ฒคํธ ์ข ๋ฃํ๋ ์ด๋ฒคํธ. ์ต์ ๋ฒ๋ธ์ด ์ฑ๊ณต์ ์ผ๋ก ์๋ช ์ฃผ๊ธฐ๋ฅผ ์๋ฃํ๊ณ ์ข ๋ฃ
- error: ์ต์ ๋ฒ๋ธ์ด ์๋ฌ๋ฅผ ๋ฐ์. ์ถ๊ฐ์ ์ธ ์ด๋ฒคํธ ์์ฑ์ ์์ผ๋ฉฐ ์๋ฌ์ ํจ๊ป ์ข ๋ฃ.
์ด๋ฌํ ํจํด์ ๋์์ฑ ์ฐ์ฐ์ ๊ฐ๋ฅํ๊ฒ ํ๋ค.
์ด๋ป๊ฒ?
์ต์ ๋ฒ๋ธ์ด ๊ฐ์ฒด๋ฅผ ๋ฐฉ์ถํ ๋๊น์ง ๊ธฐ๋ค๋ฆด ํ์ ์์ด ์ด๋ค ๊ฐ์ฒด๊ฐ ๋ฐฐ์ถ๋๋ฉด ๊ทธ ์์ ์ ๊ฐ์ํ๋ ๊ด์ฐฐ์๋ฅผ ์ต์ ๋ฒ ์์ ๋๊ณ
์ด ๊ด์ฐฐ์๋ฅผ ํตํด ๋ฐฉ์ถ ์๋ฆผ์ ๋ฐ์ผ๋ฉด ๋๊ธฐ ๋๋ฌธ์ด๋ค.
์ต์ ๋ฒ๋ธ ์์ ๋ฐ์ดํฐ๋ฅผ ์กฐํ, ๋ณํ ๋งค์ปค๋์ฆ์ ์ ์ ํ ํ
์ด๋ฒคํธ ๋ฐ์ ์ ์ต์ ๋ฒ์ ๊ด์ฐฐ์๊ฐ ๊ทธ ์๊ฐ์ ๊ฐ์งํ๊ณ ์ค๋น๋ ์ฐ์ฐ์ ์คํ์์ผ ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌํดํ๋ค.
๋ฐ๋ผ์, ์ต์ ๋ฒ๋ธ์ '๊ตฌ๋ 'ํ๋ค๋ผ๊ณ ํํํ๋ ๊ฒ.
์ต์ ๋ฒ๋ธ์ ํญ๋ชฉ๋ค์ ๋ฐฐ์ถํ๊ฑฐ๋ ์ต์ ๋ฒ๋ธ์ ๋ฉ์๋ ํธ์ถ์ ํตํด ์ต์ ๋ฒ์๊ฒ ์๋ฆผ์ ๋ณด๋ธ๋ค.
๐ 2. ๋น๋๊ธฐ ์์ ์ ์ฒ๋ฆฌํ๋ ๊ธฐ๋ณธ์ ์ธ ํ๋ฆ
์ผ๋ฐ์ ์ผ๋ก ๋๋ถ๋ถ์ ํด๋์ค๋ ๋น๋๊ธฐ์ ์ผ๋ก ์์ ์ด ์ํ๋๋ฉฐ, UI ๊ตฌ์ฑ ์์๋ค์ ๋น๋๊ธฐ์ ์ด๋ค.
๋ฐ๋ผ์ ๋ด๊ฐ ์์ฑํ ์ฝ๋๊ฐ ์ด๋ค ์์๋ก ์๋๋๋์ง ๋ช ํํ๊ฒ ์ ์ ์๋ค.
ReactiveX๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋น๋๊ธฐ์ ๋ณ๋ ฌ๋ก ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค.
๋ชจ๋ ์์ ์ด ๋น๋๊ธฐ์ ๋ณ๋ ฌ๋ก ์ด๋ฃจ์ด์ง๋ ๊ฒ์ ์๋๊ณ ๋ฉ์ธ์ค๋ ๋์์ ๋์ํ๋ ์ต์ ๋ฒ๋ธ๋ ์์ ์ ์๋ค.
์ค์ผ์ค๋ฌ๋ฅผ ์ฌ์ฉํด์ ๋น๋๊ธฐ ๋ฐ ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ๋ช ์์ ์ผ๋ก ์ค์ ํ ์ ์๋ค.
๋ณ๋ ฌ ์คํ์ ์ํ๋ฉด ์ค์ผ์ค๋ฌ๋ฅผ ์ด์ฉํด์ ์ฒ๋ฆฌ ์ค๋ ๋๋ฅผ ์ง์ ํด์ค์ผ ํ๋ค.
1. ๋น๋๊ธฐ ๋ฉ์๋ ํธ์ถ๋ก ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌํด ๋ฐ๊ณ ํ์ํ ๋์์ ์ฒ๋ฆฌํ๋ ๋ฉ์๋ ์ ์
-> ๋น๋๊ธฐ ๋ฉ์๋์์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ผ๋ฉด ์ด๋ค ๋์์ ํ ์ง ๋ฏธ๋ฆฌ ์ ์ํ๋ค. ์ด ์ ์ ๋ ๋์์ด ์ต์ ๋ฒ์ ์ผ๋ถ๊ฐ ๋๋ค.
์) ๋คํธ์ํฌ ์์ฒญ์ ๋ณด๋ธ ํ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์์ ํ๋ฉด์ ํ์ํ๋ ๋ฉ์๋๋ฅผ ๋ฏธ๋ฆฌ ์ ์
2. ์ต์ ๋ฒ๋ธ๋ก ๋น๋๊ธฐ ํธ์ถ์ ์ ์
์ต์ ๋ฒ๋ธ์ ๋น๋๊ธฐ ์์ ์ ์คํํ๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋์ค์ ๋ณด๋ด๋ ์ญํ
-> ๋น๋๊ธฐ ์์ ์ด ์คํ๋๋๋ก ์ต์ ๋ฒ๋ธ ์ค์ .
๋คํธ์ํฌ ์์ฒญ ๋ณด๋ด๊ณ ์๋ต์ ๊ธฐ๋ค๋ฆฌ๋ ์ํ๋ฅผ ์ต์ ๋ฒ๋ธ๋ก ์ ์ํ๋ ๊ฒ
3. ๊ตฌ๋ ์ ํตํด ์ต์ ๋ฒ๋ฅผ ์ต์ ๋ฒ๋ธ ๊ฐ์ฒด์ ์ฐ๊ฒฐ
๋น๋๊ธฐ ์์ ์ด ๋๋ฌ์ ๋, ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ ์ค๋น๊ฐ ๋ ์ต์ ๋ฒ์ ์ต์ ๋ฒ๋ธ์ ์ฐ๊ฒฐ
์ด๋ ๊ตฌ๋ ์ ํ๋ฉด ์ต์ ๋ฒ๋ธ์ ๋์์ด ์คํ๋๋ค.
'๊ตฌ๋ '์ด ์ค์ ๋ก ์ต์ ๋ฒ๋ธ์ด ๋์์ ์์ํ๊ฒ ๋ง๋๋ ํธ๋ฆฌ๊ฑฐ๋ค.
์ต์ ๋ฒ๋ธ์ ๊ตฌ๋ ํ๊ธฐ ์ ๊น์ง๋ ์๋ฌด๋ฐ ๋์๋ ํ์ง ์๊ณ ๊ตฌ๋ ์ด ์ด๋ฃจ์ด์ ธ์ผ ์ต์ ๋ฒ๋ฒ๋ธ์ด ํญ๋ชฉ์ ๋ฐฉ์ถํ๊ธฐ ์์ํ๋ค.
4. ๋ฉ์๋์ ํธ์ถ๋ก ๊ฒฐ๊ณผ๊ฐ ๋ฆฌํด๋ ๋๋ง๋ค ์ต์ ๋ฒ์ ๋ฉ์๋(๋ฆฌํด๊ฐ ๋๋ ์ต์ ๋ฒ๋ธ์ด ๋ฐฉ์ถํ๋ ํญ๋ชฉ๋ค์ ์ฌ์ฉํด์ ์ฐ์ฐ ์์) ์คํ
๋น๋๊ธฐ ์์ ์ด ์๋ฃ๋๋ฉด -> ์ต์ ๋ฒ๋ธ์ด ๊ฒฐ๊ณผ ๋ฐ์ดํฐ๋ฅผ ์ต์ ๋ฒ์๊ฒ ์ ๋ฌ -> ์ต์ ๋ฒ์์ ๋ฏธ๋ฆฌ ์ ์๋ ๋์(์: ๋ฐ์ดํฐ๋ฅผ ํ๋ฉด์ ํ์)์ ํตํด ์ฒ๋ฆฌ ๋จ
์ ๋ฆฌ๋ฅผ ํด๋ณด์๋ฉด,
1) ์ต์ ๋ฒ๋ธ : ์ด๋ฒคํธ ์คํธ๋ฆผ์ ์ ์ ํ๋ ์ญํ . ์ด ์คํธ๋ฆผ ์์ ๋น๋๊ธฐ ์์ ์ด ์์ ์ ์์.
2) ์ต์ ๋ฒ : ๋น๋๊ธฐ ์์ ์ผ๋ก ๋ฐ์์จ ๋ฐ์ดํฐ๋ก ๋ฌด์์ ํ ๊ฒ์ธ๊ฐ๋ฅผ ์ ์
3) subscribe(๊ตฌ๋ ): ๊ตฌ๋ ์ด ์์๋๋ฉด ๋น๋๊ธฐ ์์ ์ด ์คํ๋จ. ๊ตฌ๋ ์ ํ๋ฉด ์ค์ ๋ก ์๋ฒ ์์ฒญ์ด ์คํ๋๊ณ ๊ฒฐ๊ณผ๊ฐ ์ค๋ฉด ์ต์ ๋ฒ๊ฐ ๋ฐ์์ ์ฒ๋ฆฌ(์: ํ๋ฉด์ ๋ฐ์ดํฐ๋ฅผ ํ์).
์ด ๊ตฌ์กฐ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ฉด์๋ ๋ค๋ฅธ ์์ ์ ํ ์ ์๋ค.
๐ 3. Hot ์ต์ ๋ฒ๋ธ, Cold ์ต์ ๋ฒ๋ธ
๋ฐ์ดํฐ์ ๋ฐฉ์ถ ์์ ๊ณผ ์ต์ ๋ฒ์ ๊ตฌ๋ ์์ ์ฌ์ด์ ๊ด๊ณ์ ๋ํ ์ดํด
Hot ์ต์ ๋ฒ๋ธ
์ฐ์๋ ํญ๋ชฉ๋ค์ด ์์ฑ๋์๋ง์ ํญ๋ชฉ์ ๋ฐฐ์ถํ๊ธฐ ๋๋ฌธ์ ์ด ์ต์ ๋ฒ๋ธ์ ๊ตฌ๋ ํ๋ ์ต์ ๋ฒ๋ธ๋ค์ ํญ๋ชฉ๋ค์ด ๋ฐฐ์ถ๋๋ ์ค๊ฐ๋ถํฐ ์ต์ ๋ฒ๋ธ์ ๊ตฌ๋ ํ ์๋ ์๋ค.
์) ์ค์๊ฐ ๋ฐ์ดํฐ ์คํธ๋ฆผ(์ฃผ์ ์์ธ ๋ฑ)
์ฃผ์ ์์ธ๋ ์ค์๊ฐ์ผ๋ก ๋ณ๋ํ๊ณ ์๊ณ ๋ฆ๊ฒ ๊ตฌ๋ ํ ์์ ์ ์ด์ ๋ฐ์ดํฐ๋ฅผ ๋ณผ ์ ์๋ค.
Cold ์ต์ ๋ฒ๋ธ
์ต์ ๋ฒ๊ฐ ๊ตฌ๋ ํ ๋๊น์ง ํญ๋ชฉ์ ๋ฐฐ์ถํ์ง ์๊ธฐ ๋๋ฌธ์ ์ด ์ต์ ๋ฒ๋ธ์ ๊ตฌ๋ ํ๋ ์ต์ ๋ฒ๋ ํญ๋ชฉ ์ ์ฒด๋ฅผ ๊ตฌ๋ ํ ์ ์๋ค.
์) API ํธ์ถ, ๋ฐ์ดํฐ ๋ค์ด๋ก๋ -> API์์ ๋ฐ์ดํฐ ์์ฒญ์ ๋ณด๋ธ ํ๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ์ ์๋ค.
Connectable ์ต์ ๋ฒ๋ธ
์ต์ ๋ฒ์ ๊ตฌ๋ ์ฌ๋ถ์ ์๊ด ์์ด ์์ ์ connect ๋ฉ์๋๊ฐ ํธ์ถ๋๊ธฐ ์ ๊น์ง ํญ๋ชฉ๋ค์ ๋ฐฐ์ถํ์ง ์๋๋ค.
Hot ์ต์ ๋ฒ๋ธ์ด์ง๋ง connect ๋ฉ์๋๋ฅผ ํธ์ถํ๊ธฐ ์ ๊น์ง ๋ฐ์ดํฐ ๋ฐฉ์ถ ํ์ง ์์.
์) ์ค์๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ํด๋ผ์ด์ธํธ๊ฐ ๋์์ ๊ตฌ๋ ํด์ผํ ๋, connect๋ฅผ ํธ์ถํ์ฌ ๋ชจ๋์๊ฒ ๋์์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๊ธฐ ์์ํ๋ค.
๐ 4. ์ฐ์ฐ์ ์ฒด์ธ
"๋ฆฌ์กํฐ๋ธ ํ์ฅ(reactive extensions)"(๊ทธ๋์ "ReactiveX"๋ก ๋ถ๋ฅด๋)์ ์ง์ง ํ์ ์ฐ์ฐ์๋ก๋ถํฐ ๋์จ๋ค.
์ฐ์ฐ์๋ค์ Observable์ด ๋ฐฐ์ถํ๋ ์ฐ์๋ ํญ๋ชฉ๋ค์ ๋ณํ์ํค๊ณ , ๊ฒฐํฉํ๊ณ , ์กฐ์ํ๋ ๊ธฐ๋ฅ๋ค์ ์ ๊ณตํ๋ค.
์ฐ์ฐ์๋ค์ ํ๋์ Observable์ ์ ์ฉํ๊ณ ๋ ๋ค์ ์ฐ์ฐ์์ ๋ค์ ์ ์ฉํ ์ ์๋ ์ฐ์ฐ์ ์ฒด์ธ์ ์ ๊ณตํ๋ค.
์ฐ์ฐ์ ์ฒด์ธ์ ๊ฑธ๋ ค์๋ ๊ฐ๊ฐ์ ์ฐ์ฐ์๋ค์ ์ด์ ์ฐ์ฐ์๊ฐ ๋ฆฌํดํ Observable์ ๋ณ๊ฒฝํ๋ค.
๋นํฐํจํด๊ณผ ๋น์ทํ ๋ฐฉ๋ฒ์ผ๋ก ๋ฉ์๋ ์ฒด์ธ์ ์ ๊ณตํ๋ค.
ํ์ง๋ง ๋น๋ ํจํด์ ์ฐ์ฐ์์ ํธ์ถ ์์๊ฐ ๋ฌธ์ ๊ฐ ๋์ง ์๋๋ค.
Observable ์ฐ์ฐ์ ์ฒด์ธ์ ์๋ณธ Observable๊ณผ๋ ๋จ์ด์ ธ์ ๋์ํ ์ ์๊ณ ์์๋๋ก ๋์ํ๊ธฐ ๋๋ฌธ์,
ํธ์ถ ์ฒด์ธ ์ค ๋ฐ๋ก ์ด์ ์ ํธ์ถ๋ ์ฐ์ฐ์๊ฐ ๋ฆฌํดํ Observable์ ๊ธฐ๋ฐ์ผ๋ก ์คํ๋๋ค.
Reference
https://github.com/fimuxd/RxSwift/blob/master/Lectures/01_HelloRxSwift/Ch.1%20Hello%20RxSwift.md
'๐ iOS > RxSwift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ RxSwift ] Relay๋ฅผ ์์๋ณด์ (2) | 2024.10.15 |
---|---|
[ RxSwift ] Subject๋ฅผ ์์๋ณด์ (2) | 2024.10.11 |