Combine
- Customize handling of asynchronous events by combining event-processing operators
<aside>
๐ก ์๊ฐ ๊ฒฝ๊ณผ์ ๋ฐ๋ผ ๋ณ๊ฒฝ๋๋ ๊ฐ์ ๋ด๋ณด๋ด๋ Publisher์ ์ด๋ฅผ ์์ ํ๋ Subscriber๋ก ์๊ฐ ๊ฒฝ๊ณผ์ ๋ฐ๋ฅธ ๊ฐ ์ฒ๋ฆฌ๋ฅผ ์ํ ์ ์ธ์ Swift API
</aside>
import Combine


Publisher
protocol Publisher {
associatedtype Output
associatedtype Failure : Error
func receive<S>(subscriber: S) where S : Subscriber, Self.Failure == S.Failure, Self.Output == S.Input
}
- ํ๋ ํน์ ์ฌ๋ฌ ๊ฐ์ Subscriber ๊ฐ์ฒด์ ์๊ฐ์ด ํ๋ฆ์ ๋ฐ๋ผ ๊ฐ์ ๋ด๋ณด๋ผ ์ ์๋ ํ์
์ ์ ์ธํ๊ธฐ ์ํ ํ๋กํ ์ฝ ํํ
- ์ด๋ฒคํธ๋ฅผ ๋ณด๋ด๋ ์ญํ ์ ๋ด๋นํจ
- Output, Failure ํ์
์ด ์ ๋ค๋ฆญ์ผ๋ก ๊ตฌํ๋์ด ์์
- Declares that a type can transmit a sequence of values over time
- Subscriber์๊ฒ ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ๊ฐ (์ด๋ฒคํธ) ์ ๋ณด๋ผ ์ ์๋ ํ์
- ๊ด์ฌ์๋ ๊ฐ์ Subscribe๋ฅผ ๊ฑธ๊ณ โ ๊ทธ ๊ฐ์ ์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด (๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด) โ ๋น๋๊ธฐ์์ผ๋ก ์ด๋ฒคํธ (๊ฐ) ์ ์ ๋ฌ ๋ฐ์

Publisher์ Subscriber ์ฌ์ด์์ ๋ฐ์ํ๋ ์ด๋ฒคํธ ์์๊ฐ ์ ๋ฆฌ๋์ด์๋ ์ฌ์ง

- Publisher๊ฐ Subscriber๋ฅผ ๊ตฌ๋
- Publisher์ ์ธ์คํด์คํจ์ย subscribe()๋ฅผ ํธ์ถ
- Subscriber๋ Subscribe๋ฅผ ์์ฑํด์ Subscriber์๊ฒ ์ ๊ณต
- Publisher์ ๋ด๋ถ์ ์ผ๋ก receive()ํจ์๋ฅผ ํธ์ถ
- ๊ฒ์์๊ฐ ๋ฐ์ ๊ตฌ๋
์์๊ฒ Subscriber์ ์ธ์คํด์ค ํจ์ receive(subscription: )์ ํตํด ๊ตฌ๋
์ ์ ๋ฌ
- Subscriber๊ฐ ๊ฐ์ ์์ฒญ
- Subscription(๊ตฌ๋
)์ ์ธ์คํด์คํจ์์ธ request()๋ฅผ ํธ์ถ
- Publisher๊ฐ ๊ฐ์ ๋ณด๋
- Subscriber์ ์ธ์คํด์ค ๋ฉ์๋ receive(_ input)๋ฅผ ์ด์ฉํด์ ์ ๋ฌํ๋ฉฐ ๊ตฌ๋
์๋ ๊ฐ์ ๋ฐ์
- Publisher๊ฐ ์๋ฃ๋ฅผ ๋ณด๋
- ๊ฒ์์๊ฐ ๋ชจ๋ ๊ฐ์ ๋ณด๋๋ค๋ฉด ํน์ ์๋ฃ ์ด๋ฒคํธ๋ฅผ receive(completion: )ํจ์๋ฅผ ํตํด์ ๊ตฌ๋
์์๊ฒ ์๋ฃ์ด๋ฒคํธ๋ฅผ ์ ๋ฌํจ
์์ ์ฝ๋
Publisher ์ข
๋ฅ
- Just
- ๊ฐ์ฅ ๋จ์ํ ํํ์ Publsiher๋ก ์๋ฌํ์
์ผ๋ก Never๋ฅผ ๊ฐ์ต๋๋ค.
- Promise
- Just์ ๋น์ทํ์ง๋ง Filter Type์ ์ ์ํ ์ ์์ต๋๋ค.
- Fail
- ์ ์๋ ์คํจํ์
์ ๋ด๋ณด๋
๋๋ค.
- Empty
- ์ด๋ค ๋ฐ์ดํฐ๋ ๋ฐํํ์ง ์๋ ํผ๋ธ๋ฆฌ์
๋ก ์ฃผ๋ก ์๋ฌ์ฒ๋ฆฌ๋ ์ต์
๋๊ฐ์ ์ฒ๋ฆฌํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.