์ง๋ ์๊ฐ์ ์ด์ด ๋๋ฒ์งธ๋ก ๋์์จ Combine ์ธ๋ฏธ๋ 2ํ์ ๋๋ค.
์ด๋ฒ ์๊ฐ์๋ Subject ์ ๋ํด ์ด์ผ๊ธฐ ํด๋ณด๋ ค๊ณ ํฉ๋๋ค!! ๋๋ฅ ๐คฉ
Subject?
https://developer.apple.com/documentation/combine/subject
Subject | Apple Developer Documentation
A publisher that exposes a method for outside callers to publish elements.
developer.apple.com

Subject ๋ ๋ฌด์?
๋ณด์ํ๋ Publisher ํ๋กํ ์ฝ์ ๋ฐ๋ฅด๊ณ ์๊ณ , Publisher ๋ผ๋๊ฒ์ ์ ์ ์์ฃ ,,
๊ทธ๋ผ ๊ทธ๋์ ์ฐ๋ฆฌ๊ฐ ์๊ณ ์๋ Publisher์๋ ์ด๋ค ์ฐจ์ด์ ์ด ์์๊น์?

⇒ ๋ฐ๋ก send(_:) ๋ฉ์๋๋ฅผ ์ด์ฉํด์ ๋ฐ์์!! ์ด๋ฒคํธ ๊ฐ์ ์ฃผ์ ์ํฌ ์ ์๋ ํผ๋ธ๋ฆฌ์ ์ ๋๋ค.
๋ญ ์๋ฆฐ์ง ์์ง ๋ชจ๋ฅด๊ฒ ์ฃ ? ใ ใ ์ผ๋จ ๋ด ์๋ค
Subject๋ 2๊ฐ์ง ๋นํธ์ธ ํ์ ์ด ์๋๋ฐ์, ๋๊ฐ์ง Subject์ ์ฐจ์ด๋ฅผ ์ฝ๊ฒ ์ค๋ช ํด๋ณผ๊ฒ์
๋ง์ฝ send ๋ฉ์๋๋ฅผ ํตํด 1→ 2→ 3 ์ด๋ผ๋ ๊ฐ๋ค์ ์์๋๋ก ์ฃผ์ ์์ผฐ์๋
1. PassthroughSubject: Subscriber๊ฐ ๊ฐ์ ์์ฒญํ๋ฉด, ๋ด๊ฐ ๋ฐฉ๊ธ ๋ฐ์ ๊ฐ 3์ ์ ๋ฌํฉ๋๋ค
2. CurrentValueSubject: Subscriber๊ฐ ๊ฐ์ ์์ฒญํ๋ฉด, ์ต๊ทผ์ ๊ฐ๊ณ ์๋ ๊ฐ 1, 2 ๋ฅผ ์ ๋ฌํ๊ณ ~ ๋ฐฉ๊ธ ๋ฐ์ ๊ฐ 3 ์ ์ ๋ฌํฉ๋๋ค.
์์ ํ๋ฒ ๋ณผ๊ฒ์!
// PassthroughSubject
let relay = PassthroughSubject<String, Never>()
let subscription1 = relay.sink { value in
print("subscription1 received value: \(value)")
}
relay.send("Hello")
relay.send("World!")
// CurrentValueSubject
let variable = CurrentValueSubject<String, Never>("")
variable.send("Initial text")
let subscription2 = variable.sink { value in
print("subscription2 received value: \(value)")
}
variable.send("More text")
variable.value

๋จผ์ ์ดํด๋ณผ ๊ฒ์
send๋ฉ์๋๋ฅผ ํตํด์ ์ธ๋ถ์์ Subject ์ ๊ฐ์ ์ฃผ์ ์ํค๊ณ ์๋๊ฒ์ ๋ณผ ์ ์์ฃ !
๊ฒฐ๊ณผ ๊ฐ์ ๋ณด๋ฉด, PassthroughSubject ๊ฐ์ ๊ฒฝ์ฐ์
send ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ "Hello" , "World!" ๋๊ฐ์ง ๋จ์ด๋ฅผ
์ธ๋ถ์์ PassthroughSubject (publisher) ์ ๊ฐ์ ์ฃผ์ ์์ผ ์ฃผ์์ฃ .
๊ทธ๋ฌ์๋ ๊ฐ์ฅ ์ต๊ทผ์ ๊ฐ๋ง ์์๋๋ก ๋ณด์ฌ์ฃผ๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
๋ฐ๋ฉด์ CurrentValueSubject ๋ฅผ ๋ณด๋ฉด
sink ๋ก ๊ตฌ๋ ํ๊ธฐ ์ ์ variable (CurrentValueSubject) ์ "Initial text" ๋ผ๋ ๊ฐ์ ๋จผ์ ์ฃผ์ ์ํค๊ณ
sink ๋ก ๊ตฌ๋ ํ ํ์ "More text" ๋ฅผ ์ฃผ์ ์์ผ ์ฃผ์๋๋
๋จผ์ ๋ค์ด์๋ ๊ฐ์ธ Initial text๊ฐ ๋จผ์ ์ถ๋ ฅ๋๊ณ ๊ทธ ๋ค์์ More text ๊ฐ ์ถ๋ ฅ๋๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
์ด์ ์ฐจ์ด๋ฅผ ์์๊ฒ ๋์?? ๐
์ฌ๊ธฐ๊น์ง Subject์ ๊ฐ๋ ๊ณผ Subject ์ ๋นํธ์ธ ํ์ ์ธ PassthroughSubject ์ CurrentValueSubject ์ ์ฐจ์ด์ ๋ํด ์์๋ณด์์ต๋๋ค!
๋ค์ ์๊ฐ์๋ Combine ์ 3๋์ฅ(Publisher, Subscriber, Operator) ์ค ํ๋์ธ Operator ์ ๋ํด ์์๋ณผ๊ฒ์
๊ทธ๋ผ ์๋จ์ค์ค์น~~~ ๐๐
'ํ๋ก์ ํธ ๐ ๏ธ > iOS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| URLSession + Combine ์กฐํฉ์ผ๋ก ๋คํธ์ํฌ ๋ ์ด์ด ๋ง๋ค๊ธฐ (0) | 2023.06.10 |
|---|---|
| Combine(3): Operator (0) | 2023.06.10 |
| Combine(1): Publisher, Subscriber! (0) | 2023.06.10 |
| @StateObject @ObserverdObject ๊ทธ๋์ ๋ญ์ ๋ค๋ฅธ๋ (0) | 2023.04.06 |
| Firebase Storage ์ asnyc/await ๋ฅผ ์ฌ์ฉํด์ ๋ค์ค์ด๋ฏธ์ง ์ฒ๋ฆฌํ๊ธฐ (0) | 2023.04.06 |