[Combine] Publisher
Publisher
์ด์ ๊ธ์์ publisher๋ ๊ฐ์ ๋ฐฉ์ถํ๋ ๊ฒ! ์ ๋๋ก๋ง ์์๋์ ๋ผ๊ณ ํ๋๋ฐ์! ํ .. ์ข ๋ ์์ธํ๊ฒ ๊ณต์ ๋ฌธ์๋ฅผ ๋ด ์๋ค.
Publisher๋ ์ด๋ ํ ์์(element)๋ฅผ ์๊ฐ ํ๋ฆ์ ๋ฐ๋ผ ๋ฐฉ์ถํฉ๋๋ค.
์ ๋ ์ฒ์์ โ์๊ฐ์ ํ๋ฆ์ ๋ฐ๋ผโ ๋ผ๋ ๋ฌธ์ฅ์ด ์ง๊ด์ ์ผ๋ก ๋ค๊ฐ์ค์ง ์์์ด์. ํ์ง๋ง ๊ทธ๋ฆผ์ผ๋ก ๋ณด๋ฉด ๋ฐ๋ก ์ดํด๊ฐ ๋ ๊ฒ๋๋ค!
1์ด์ 4
๋ผ๋ ๊ฐ์ ๋ฐฉ์ถํ๊ณ , 5์ด์ 8
์ด๋ผ๋ ๊ฐ์, 8์ด ์ฏค์๋ 15
๋ผ๋ ๊ฐ์ ๋ฐฉ์ถํ๊ณ ์๋ค๋๊ฒ ๋ณด์ด๋์? โ์๊ฐ์ ํ๋ฆ์ ๋ฐ๋ผโ ์ด๋ฒคํธ๊ฐ ๋ฐฉ์ถ๋๊ณ ์์ฃต?
์ด๋ ๊ฒ ๋ฐฉ์ถ๋ ๊ฐ์ ํ๋ ๋๋ ๊ทธ ์ด์์ Subscriber
์ ์ ๋ฌ๋ฉ๋๋ค!
์ด๋ ๊ฒ ๋ง์ด์ฃ !
์ด๋ Publisher<Int, Never>
์ ์ฃผ๋ชฉํด๋ณผ๊น์? ๋ฐ๋ก Publisher์ Output
๊ณผ Failure
ํ์
์
๋๋ค! ์ง์ํ ์ ์๋ฏ์ด Output
์ publisher
๊ฐ ๋ฐฉ์ถํ๋ ๊ฐ์ ์ข
๋ฅ์ด๊ณ Failure
์ publisher
๊ฐ ๋ฐฉ์ถํ ์ ์๋ ์๋ฌ์ ์ข
๋ฅ์
๋๋ค.
์ฌ๊ธฐ์๋ Output
์ Int
ํ, Failure
์ Never
(Error๊ฐ ๋ฐ์ํ ์ผ์ด ์๋ค)๊ฐ ๋๊ฒ ๋ค์.
๋น์ฐํ๊ฒ๋ Subscriber
์ Input
&Failure
์ associated type
์ publisher
์ Output
&Failure
ํ์
๊ณผ ์ผ์นํด์ผ ํฉ๋๋ค.
Protocol
๊ทธ๋ผ publisher
์ subscriber
์ ์ด๋ป๊ฒ ์ฐ๊ฒฐํ ์ ์์๊น์? publisher
๋ subscriber
๋ฅผ ๋ฐ์๋ค์ด๊ธฐ(accept) ์ํด receive(subscriber:)
๋ฅผ ๊ตฌํํฉ๋๋ค. ํด๋น ํจ์๋ Publisher
protocol์ ์ ์๋์ด ์์ด์~ ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌ๋ subscriber
๋ ํด๋น Publisher
์์ ๋ฐฉ์ถํ๋ ๊ฐ๋ค์ ๋ฐ์ ์ ์๊ฒ ์ฃ ?
์ดํ์ publisher
๋ ์๋์ ๊ฐ์ subscriber
์ ํจ์๋ฅผ ํธ์ถํ ์ ์์ด์! ์ดํ ํฌ์คํ
์์ ๋ ์์ธํ ์ค๋ช
ํ๊ฒ ์ง๋ง ๊ฐ๋ณ๊ฒ ์ฝ๊ณ ๋์ด๊ฐ๋ณผ๊น์?
receive(subscription:)
:subscriber
์๊ฒSubscription
์ธ์คํด์ค๋ฅผ ์ ๋ฌํด์ค๋๋ค! ์ด๊ฒ์ ์ด์ฉํด์subscriber
์publisher
์elements
๋ฅผ ์๊ตฌํ๊ฑฐ๋, ๋ ์ด์ ๊ฐ์ ๋ฐ์ง ์๊ฒ ๋ค๊ณ ํ ์๋ ์์ด์~Subscription
์subscriber
์publisher
์ ์ฐ๊ฒฐ์ ๋ํ๋ด๋๊ฒ์ผ๋ก ๋ณผ ์ ์๊ฒ ์ฃ ?receive(_:)
:publisher
์์ ์์ฑ๋element
๋ฅผsubscriber
๋ก ์ ๋ฌํ๊ธฐ ์ํด ์ฐ์ ๋๋ค.receive(completion:)
:subscriber
์๊ฒ ์ด๋ฒคํธ ๋ฐฉ์ถ(publishing)์ด ์ ์์ ์ผ๋ก ๋๋ ์๋ฌ๋ก ์ธํด ๋๋ฌ์์ ์๋ ค์ค๋๋ค.
์ฐธ๊ณ ๋ก Publisher
์ Extensions
์ ๋ง์ ์ฐ์ฐ์(operator)๋ฅผ ์ ๊ณตํ๋๋ฐ ์ด๊ฒ๋ค์ ์กฐํฉ์ ํตํด์ ์ธ๋ จ๋ ์ด๋ฒคํธ ์ฒ๋ฆฌ ์ฒด์ธ์ ๋ง๋ค ์ ์์ต๋๋ค. ๊ฐ operator
์ Publisher
ํ๋กํ ์ฝ์ ํ์
์ ๋ฐํํ๊ธฐ ๋๋ฌธ์ ์ด๋ฌํ ์ฒด์ธ์ด ๋ง๋ค์ด์ง ์ ์๊ฒ ์ฃ ? ์ด๋ฌํ ํ์
์ ๋๋ถ๋ถ์ Publishers
enumeration
์ extensions
์ ์กด์ฌํ๋๋ฐ์..! ์๋ฅผ ๋ค์ด map(_:)
์ฐ์ฐ์๋ Publishers.Map
์ ์ธ์คํด์ค๋ฅผ ๋ฆฌํดํฉ๋๋ค. ์ ์ดํด๊ฐ ์๋๋ค๋ฉด ์ดํ ์ฐ์ฐ์ ๋ถ๋ถ์์ ๋ค์ ๋ณด๋ฉด ๋๋๊น ๊ทธ๋ฅ ๋์ด๊ฐ์๋ค๐
Publisher์ ์ข ๋ฅ
Convenience Publisher
- Future: ์คํจํ๊ฑฐ๋ ํ๋์ ๊ฐ์ ๋ฐฉ์ถํ ํ ์๋ฃ๋ฉ๋๋ค.
- Just: ๊ฐ๊ฐ์ subscriber์๊ฒ ๋ฑ ํ ๋ฒ ๊ฐ์ ๋ฐฉ์ถํ๊ณ ์๋ฃ๋ฉ๋๋ค.
Future๊ณผ Just์ ์ฐจ์ด์ ์ ๋ณด๊ณ ์ถ์ผ๋ฉด ์ฌ๊ธฐ๋ฅผ ์ฐธ๊ณ ํ์ธ์
- Empty: ์ด๋ค ๊ฐ๋ ๋ด๋ณด๋ด์ง ์์ต๋๋ค. ์ฆ์ ์ข ๋ฃ๋ ์๋ ์์ต๋๋ค.
- Fail: ํน์ ํ error์ ํจ๊ป ์ฆ์ ์ข ๋ฃ๋ฉ๋๋ค.
์ด ์ธ์๋ Deferred
, Record
๋ฑ์ด ์์ง๋ง ์จ๋ณด์ง ์์์ ํด์ํ๊ธฐ ๊ท์ฐฎ..์ด๋ ตโฆ.ใ
ใ
ํ์ํ ๋ ์จ๋ณด๋ฉด์ ์์๊ฐ๊ธฐ๋ก ํ์ฃ ~~ ํ์ง๋ง ์์ด ์ํ๋ ์กด์๋๋ค์ ์ํด ์ผ๋จ ๋จ๊ธฐ๊ณ ๊ฐ๋๋ค..ํด์ํด์ฃผ์ธ์ฌ๐ค
- Deferred: A publisher that awaits subscription before running the supplied closure to create a publisher for the new subscriber.
- Record : A publisher that allows for recording a series of inputs and a completion, for later playback to each subscriber.
์์ ๋ง์ Publisher ๋ง๋ค๊ธฐ
Combine
ํ๋ ์์ํฌ์์ ์ ๊ณตํ๋ ํ์
๋ค์ ์ด์ฉํด์ ์์ ๋ง์ publisher
๋ฅผ ๋ง๋ค ์๋ ์์ต๋๋ค. ์๋์ ๋ฐฉ๋ฒ๋ค์ ๋์ค์ ๋ค์ ์ค๋ช
ํ ํ
๋ ์ผ๋จ Publisher
๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ค์ํ๊ตฌ๋.. ์ ๋๋ง ์๊ณ ๊ฐ์๋ฉด ๋ฉ๋๋น๐
PassthroughSubject
์ ๊ฐ์Subject
์ subclass๋ฅผ ๋ง๋ญ๋๋ค.send(_:)
์ ํธ์ถ์ ํตํด ํ์์ ๋ฐ๋ผ ๊ฐ์ ๋ฐํํ ์ ์์ต๋๋ค.- ๊ฐ์ด ์
๋ฐ์ดํธ ๋ ๋๋ง๋ค ๊ฐ์ ๋ฐํํ๊ธฐ ์ํด
CurrentValueSubject
๋ฅผ ์ฌ์ฉํฉ๋๋ค. - ์์ ์ ํ์
์ค ํ๋์ ํ๋กํผํฐ์
@Published
annotation ์ ์ฌ์ฉํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ํ๋กํผํฐ์ ๊ฐ์ด ๋ฐ๋๋๋ง๋ค ์ด๋ฒคํธ๋ฅผ ๋ฐฉ์ถํ๋ publisher๋ฅผ ์ป์ ์ ์์ต๋๋ค.
๋ง๋ฌด๋ฆฌ
์ง๊ธ๊น์ง Publisher
์ ๋ํด ์์๋ดค์ต๋๋ค!๐๐ป ๋ฐํํ๋ ์ ๊ฐ ์๋ค๋ฉด ๊ตฌ๋
ํ๋ ์ ๋ ์์ด์ผ๊ฒ ์ฃ ? ์ง๊ฟ Subscriber
์ ๋ํด ์์๋ณด๋ฌ ๊ฐ๋ด
์๋ค! ๊ณ ๊ณ ๋ง~~~