Apple์ Combine์ ๋ํด ์ด๋ ๊ฒ ์ ์ํ๋ค.
A Unified, declarative API for processing values over time ์๊ฐ์ ๋ฐ๋ฅธ ๊ฐ๋ค์ ์ฒ๋ฆฌํ๊ธฐ ์ํ ํตํฉ์ ์ด๊ณ ์ ์ธ์ ์ธ API
- Unified: Apple์ ๊ธฐ์กด ๋น๋๊ธฐ ์ธํฐํ์ด์ค๋ก Target/action, Notification Center, URLSession, KVO, ์ฝ๋ฐฑ ๋ฑ์ ์์๋ฅผ ๋ค๋ฉด์ Combine์ด ์ด๋ค์ ๋์ฒดํ๋ ๊ฒ ์๋๋ผ, ์ด๋ค์ ๊ฐ์ ํํ์ ์ธํฐํ์ด์ค๋ก ์ฌ์ฉํ ์ ์๊ฒ ๋ง๋ค์ด์ค๋ค๋ ์ ์์ ํตํฉ์ (Unified)๋ผ๋ ํํ์ ์ฌ์ฉํ๋ค. (๋ค๋ง Target/Action์ SwiftUI๋ฅผ ์ฌ์ฉํ์ง ์์ ์ฑ๋ก Combine์ผ๋ก ๋์ฒดํ ์ ์๋์ง ์์ง ๋ฐ๊ฒฌx)
- Declarative: ๋ฐ๋ณต๋ฌธ, ์กฐ๊ฑด๋ฌธ ๋ฑ์ ์ ์ด ํ๋ฆ(Control Flow)์ ์ง์ ๋ช ์ํ์ง ์๊ณ ํ๋ก๊ทธ๋จ์ด ์ํํด์ผ ํ ๋ก์ง๋ค์ ์ฐจ๋ก๋๋ก ์ฐ๊ฒฐํ์ฌ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ ๋ฐฉ์์ด๋ค. ์ฌ๊ธฐ์ ์ ์ด ํ๋ฆ์ map, filter ๋ฑ์ ๊ธฐ๋ณธ ์ฐ์ฐ๋ค(primitives)์ ์ํด ๊ฐ๋ ค์ง๊ฒ ๋๋ค.
- Processing values over time: ๋์์ ๋ฐ๋ผ ๊ฐ์ ํ๊บผ๋ฒ์ ๋ฐ์ง ์๊ณ , ์๊ฐ ๊ฐ๊ฒฉ์ ๋ฐ๋ผ ๋น๋๊ธฐ์ ์ผ๋ก ๋ฐ๊ฒ ๋๋ค๋ ๋ป์ด๋ค.
Combine์ ๊ตฌ์ฑํ๋ ์์๋ค์ ๋ค์๊ณผ ๊ฐ๋ค.
- Publisher: ๊ฐ๊ณผ ์๋ฌ๋ฅผ ๋ง๋ค์ด๋ด๋ ๋ฐฉ๋ฒ์ด ์ ์๋์ด ์๋ ๊ฐ์ฒด์ด๋ค. Publisher๋ ํ๋กํ ์ฝ์ด์ง๋ง, ์ด ํ๋กํ ์ฝ์ ์ฑํํ๋ ํ์ ์ ๊ฐ์ ํ๋ ๋ถ๋ถ์ ์์ง๋ง ๊ฐํ์ (struct)์ด ์ ์ ํ๋ค.
- Subscriber: Publisher๋ก๋ถํฐ ๊ฐ์ ๋ฐ์์ ์ฌ์ฉํ๋ ๊ฐ์ฒด์ด๋ค. Subscriber๋ identity๊ฐ ์์ด์ผ ๋๊ธฐ ๋๋ฌธ์ ์ฐธ์กฐ ํ์ (class)์ผ๋ก ์ ์ธ๋์ด์ผ ํ๋ค.
- Operator: Publisher์ ์ผ์ข ์ผ๋ก, ๋ค๋ฅธ Publisher์์ ๋์จ ๊ฐ์ ๋ฐ์ ์ฒ๋ฆฌํ๋ ๋ฐ ํนํ๋์ด ์๋ Publisher์ด๋ค. Operator๋ ์ง์ ๋ง๋๋ ๊ฒฝ์ฐ๋ ์๊ณ , Publisher์ ์ธ์คํด์ค ๋ฉ์๋๋ฅผ ํตํด์ ๋ง๋ค๋๋ก ์บก์ํ๋์ด ์๋ค. ์ด๋ ๊ฒ Operator๋ฅผ ์ฌ๋ฌ ๊ฐ ์ฐ๊ฒฐํด์ ์ํ๋ ๋ก์ง์ ์ฒ๋ฆฌํ๋๋ก ๋ง๋๋ ๊ฒ Combine์ ํ์ฉํ ํ๋ก๊ทธ๋จ์ ํต์ฌ์ด๋ค.
Combine์ ๋์ ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
- Publisher์ Subscriber๋ฅผ ๋ง๋ค๊ณ , Subscriber๋ Publisherd์ Subscribe(_) ๋ฉ์๋๋ฅผ ํตํด Publisher๋ฅผ ๊ตฌ๋ ํ๋ค.
- Publisher๋ ์ฐ์ฐ ๋ฐฉ๋ฒ๊ณผ ์ฐ์ฐ์ ํ์ํ ์ํ๋ฅผ ์บก์ํํ Subscription ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์ Subscriber์ ๋ณด๋ธ๋ค.
- Subscriber๋ Subscription์ ์์ ์ด ์ํ๋ ์ด๋ฒคํธ์ ์๋ฅผ ์๋ฏธํ๋ Demand๋ฅผ ๋ง๋ค์ด์ Subscription์ ๋ณด๋ธ๋ค.
- Subscription์ Demand๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ ์ ํ ์์ ๊ฐ ๋๋ ์๋ฃ ์ด๋ฒคํธ๋ฅผ ๋ณด๋ธ๋ค. Demand๋ฅผ ์ด๋ป๊ฒ ์ฌ์ฉํ๋ ์ง๋ ์์ ํ Subscription์ ์ฌ๋์ผ๋ก, ์ ํํ ์์ ๊ฐ์ ๋ณด๋ผ ์๋ ์๊ณ ๊ทธ๋ณด๋ค ์ ์ ์, ํน์ ๋ง์ ์๋ฅผ ๋ณด๋ผ ์๋ ์๋ค. (์ ํ์ API๋ ์์ฒญ๋์ ๋ง๊ฒ ๋ณด๋ด์ฃผ๊ณ , ๋ ์ด์ ๋ณด๋ผ ์ ์์ผ๋ฉด ์๋ฃ ์ด๋ฒคํธ๋ฅผ ๋ณด๋ด๋๋ก ๋์ด)
- Subscription์ ํ์ํ ๋์ Subscriber์ ์๋ฃ ์ด๋ฒคํธ๋ฅผ ๋ณด๋ธ๋ค.
- ์๋ฃ ์ด๋ฒคํธ๋ฅผ ๋ฐ์ Subscriber๋ ์์ ์ ๋ง๋ฌด๋ฆฌํ๊ธฐ ์ํ ์ถ๊ฐ ์์ ์ด ํ์ํ๋ฉด ํ๋ค.
https://developer.apple.com/wwdc19/722
https://jcsoohwancho.github.io/2020-01-18-Combine-์์ํ๊ธฐ(1)-Overview/