์ฝค๋ฐ์ธ ์ด์ , ์ํ๋ณํ์ ๋ํ ๋น๋๊ธฐ์ฒ๋ฆฌ๋ ์ฌ๋ฌ ๋ฐฉ๋ฒ์ผ๋ก ๋๋์ด์ ธ ์์๋ค. ์ปดํ์ธ์ ์ด๋ ๊ฒ ์ฌ๋ฌ๋ฐฉ๋ฒ์ผ๋ก ์ฒ๋ฆฌ๋๋ ๋น๋๊ธฐ+์ํ๊ด๋ฆฌ๋ฅผ ํ๋ ธ์ค๋ง๋ฅ ํ ๋ฐฉ์ ์ฒ๋ฆฌํด์ฃผ๋ ๋ ์์ด๋ค.(์ฃผ์ํ ์ : iOS13๋ถํฐ ์ฌ์ฉํ ์ ์๋ค.)
Rx์ ์ฌ์ฅ์ด Observable์ธ ๊ฒ์ฒ๋ผ Combine์ ์ฌ์ฅ์ Publisher ๋ผ๊ณ ๋ณผ ์ ์๋ค. Publisher๊ฐ ๋ฐฉ์ถํ๋ ์ด๋ฒคํธ๋ฅผ ๋ฐ๋ ๋ ์์ subscriber์ด๋ค. Publisher ๊ฐ ๋ฐฉ์ถํ๋ ์ด๋ฒคํธ๋ฅผ Subscriber๊ฐ ๋ฐ๋ ๊ณผ์ ์ ์์ ๊ฐ์ด ์งํ๋๋ค. ์ด๋ 2๋ฒ์ ํ๋ ์์ํฌ ๋ด๋ถ์ ์ผ๋ก ๋์ํ๋๊ฑฐ๋ผ ๊ฐ๋ฐ์ ์ ์ฅ์์๋ ํฌ๊ฒ ์ ๊ฒฝ์ฐ์ง ์์๋๋๋ ๋ถ๋ถ์ด๋ค.
Publisher๋ ํ๋กํ ์ฝ๋ก ๋์ด์๋ค. ๋ด๋ถ๋ฅผ ์ดํด๋ณด์. FRP์ ๋ชจ๋๋ ๊ฐ๋ ์ ์ ์ฉ์์ผ associatedType ์ผ๋ก ์ ์๋ Output๊ณผ ์๋ฌํ์ ์ ์ฑํํ๊ณ ์๋ Failure๊ฐ ์ ์ธ๋์ด ์๋ค. ๊ตฌ๋ ์ ํ๊ฒ๋๋ฉด Publisher ์ Subscriber๋ ๋ฐ๋์ Output ๊ณผ Faliure ๊ฐ ์ฐ๊ฒฐ๋๊ฒ ๋๋ค.
Subscriber๋ Publisher์์ ๋ฝ์์ค๊ณ ์ถ์ Ouput์ ์์ฒญํ๊ธฐ ์ํด Inputr ๊ณผ Failure ๊ฐ ์ ์ธ๋์ด์๋ค. ์ฌ๊ธฐ์ CustomCombineIdentifierConvertible ํ๋กํ ์ฝ์ Publiser, Subscriber ๋ฅผ ์ธ์คํด์ค๋ก ๋ง๋ค์ด๋ ๊ฐ๊ฐ ๊ตฌ๋ณํ ์ ์๊ฒ ์๋ณ์๋ฅผ ๋ถ์ฌํด์ฃผ๋ ์ญํ ์ ์ํํ๋ค.
Subscription ํ๋กํ ์ฝ์ Publisher ์ Subscriber ์ฌ์ด์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌํ๋ฉฐ, ๋ฐ์ดํฐ ์คํธ๋ฆผ์ ํ๋ฆ์ ์ ์ดํ๋ ๋ฐ ์ฌ์ฉ๋๋ค. Subscription์ Subscriber๊ฐ Publisher๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๊ธฐ ์์ํ ๋ ์์ฑ๋๋ฉฐ, Subscriber๊ฐ ๋ ์ด์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๊ณ ์ถ์ง ์์ ๋๊น์ง ์ ์ง๋๋ค. Subscription ํ๋กํ ์ฝ์ ํตํด "๋ฐ์ดํฐ ์์ฒญ" ๊ณผ "๊ตฌ๋ ์ทจ์"๋ฅผ ์ํํ ์ ์๋ค. ๋ฐ์ดํฐ ์์ฒญ์ ๋ณด์ด๋ request ๋ฉ์๋์์ ํ๋ค๊ณ ํ์ ๋ ๊ตฌ๋ ์ทจ์๋ ์ด๋์ ํ๋๊ฑธ๊น? ๋ฐ๋ก Cancellable ํ๋กํ ์ฝ์ด๋ค.
Canecllalve ํ๋กํ ์ฝ ๋ด๋ถ์์๋ ์์ ๊ฐ์ด cancel ๋ฉ์๋๋ฅผ ์ ์ํ๊ณ ์๊ณ subscription ํ๋กํ ์ฝ์ ์ด ํ๋กํ ์ฝ์ ์ฑํํจ์ผ๋ก์จ ๊ตฌ๋ ์ทจ์ ์ญํ ๋ ์ํํ๊ฒ ๋๋ค. Rx์์ disposeBag ์ ๋ด์ ํด์ ์์ผ์ฃผ๋ ๊ฒ์ฒ๋ผ Combine์์๋ AnyCancellable๋ก ์์ฃผ ์ฌ์ฉ๋๋ค.
๊ธฐ๋ณธ์ ์ธ ๊ตฌ์ฑ์ ์ดํด๋ดค๋ค๋ฉด ์์ ์ฝ๋๋ฅผ ํตํด ์ด๋ป๊ฒ ์ฝ๋๋ก ์์ฑ๋๋์ง ๋ณด์. Publisher๋ฅผ ์ผ์ข ์ ๋ ธํฐํผ์ผ์ด์ ์ผํฐ๋ผ๊ณ ์๊ฐํด๋ณด์. ์ค์ ๋ก ๋ ธํฐํผ์ผ์ด์ ์ผํฐ์ Combine ์ฝ๋๋ฅผ ์ธ ์ ์๋ค. ๋ ธํฐํผ์ผ์ด์ ์ผํฐ๋ฅผ ํผ๋ธ๋ฆฌ์ ๋ก ๋ง๋ค๊ณ sink๋ฅผ ํตํด ๊ตฌ๋ ํ๋ค ๋ ธํฐํผ์ผ์ด์ ๋ฉ์๋์ธ post๋ฅผ ํตํด ์ด๋ฒคํธ๋ฅผ ๋์ง๋ฉด ์์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์๋ค.
https://www.kodeco.com/5429795-reactive-programming-in-ios-with-combine/lessons/1
'๐ฆ Flutter' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| Combine | 2. Operators and Subjects (0) | 2024.05.07 |
---|---|
ViewController์ ์๋ช ์ฃผ๊ธฐ (0) | 2024.05.06 |
UserDefaults ๋ฅผ ์ฌ์ฉํ ๋ ๊ฐ์ฒด์ Codable ์ ์ฑํํ ์ด์ (0) | 2024.05.05 |
| WWDC 19 | Introducing SwiftUI - Building Your First App (0) | 2024.04.23 |
WWDC 19 SwiftUI Essentials (0) | 2024.04.22 |