Combine์ ์๊ธฐ ์ ์, Functional Reactive Programming์ด ์ด๋ค ๋งฅ๋ฝ์์ ๋์๋์ง ์ดํดํ ํ์๊ฐ ์๋ค.
ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ Low Memory → Mass Production → Concurrency ์ ๊ฐ์ ๋งฅ๋ฝ์ผ๋ก ๋ณํํด์๋๋ฐ. ํ์ฌ๋ Concurrency ๋จ๊ณ๋ก ์ฌ๋ฌ๊ฐ์ ์ค๋ ๋์์ ์์ ์ด ์ด๋ฃจ์ด์ง๊ณ ์๋ ํจ๋ฌ๋ค์์ ๊ฐ์ง๊ณ ์๋ค.
๊ทธ๋ฌ๊ธฐ์ Side Effect๊ฐ ์์ ์๋ฐ์ ์์๊ณ , ๊ทธ๋ฌ๊ธฐ์ Pure Function์ ์ฌ์ฉํ๋ Functional ํจ๋ฌ๋ค์์ด ๋ํ๋ ์ ๋ฐ์ ์์๋ค.
๊ทธ๋ฆฌ๊ณ async ํ ์ํฉ์์ asyncํ ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ๊ฒ์ธ๊ฐ? ์ ๋ํ ๋๋ต์ผ๋ก stream ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ํ๋ ค๋ณด๋ด์๋ Reactive Programming์ด ๋์ค๊ฒ ๋์๋ค.
Combine ์ด๋?
๊ฐ๋จํ๊ฒ ๋งํด์, Combine์ ์๊ฐ์ ๋ฐ๋ผ ๋ณํํ๋ ๊ฐ์ ์ฒ๋ฆฌํ๊ธฐ ์ํ ์ ์ธ์ Swift API ์ด๋ค. ์ด ๊ฐ๋ค์ ๋น๋๊ธฐ์ ์ธ ์ฌ๋ฌ ์ด๋ฒคํธ๋ฅผ ๋ํ๋ผ ์ ์๋ค. Combine ์๋ Publisher์ Subscriber ๋ผ๋ ์ค์ํ ๊ฐ๋ ์ด ์กด์ฌํ๋ค.
Publisher, Subscriber
Publisher๋ ์ด๋ฒคํธ๋ฅผ ์ ๋ฌํ๋ ์กด์ฌ์ด๋ค. Subscriber๋ Publisher๊ฐ ๋ด๋ณด๋ธ ์ด๋ฒคํธ๋ฅผ ์์ ํ๋ ์กด์ฌ์ด๋ค.
- Publisher์ subscribe(_:) ๋ฉ์๋์ ์ ๋ฌ์ธ์๋ก Subscriber ์ธ์คํด์ค๋ฅผ ์ ๋ฌํ์ฌ ์ด ๋ ์ฌ์ด์ ์ฐ๊ฒฐํ๋ค.
- Publisher๋ Subscription์ ์ ๋ฌํ๋ค.
- Subscriber ๋ ์ ๋ฌ ๋ฐ์ Subscription์ request(_:) ๋ฉ์๋๋ฅผ ํตํด Publisher์ ๊ฐ์ ์ ๋ฌํ๋ผ๊ณ ์์ฒญํ๋ค.
- Subscriber์ receive(_:) ๋ฉ์๋๋ Publisher๋ก๋ถํฐ ์ ๋ฌ๋ฐ์ ๊ฐ์ ์ฒ๋ฆฌํ๋ค.
- ๋ง์ฝ ๋ ์ด์ Subscriber์๊ฒ ์ ๋ฌํ ๊ฐ์ด ์์ผ๋ฉด receive(completion:) ๋ฉ์๋๋ฅผ ํตํด completion, ํน์ ์ค๋ฅ๋ฅผ ์ ๋ฌ๋ฐ๋๋ค.
Combine ์ ์ฅ์
์ด๋ฒคํธ ์ฒ๋ฆฌ ์ฝ๋๋ฅผ ์ค์ ์ง์คํํ์ฌ ์ฝ๋๋ฅผ ์ฝ๊ธฐ ์ฝ๊ณ ์ ์ง๋ณด์ํ๊ธฐ ์ฝ๊ฒ ๋ง๋ค ์ ์๋ค. ์ด๋ ์ค์ฒฉ ํด๋ก์ ๋ ์ฝ๋ฐฑ๊ฐ์ ๋ฒ๊ฑฐ๋ก์ด ๊ธฐ๋ฒ์ ์ ๊ฑฐํ ์ ์๋ค.