Subject
Subject๋ ์์๋ฅผ ๋ฐํํ๊ธฐ ์ํด ์ธ๋ถ ํธ์ถ์์๊ฒ ๋ฉ์๋๋ฅผ ๋ ธ์ถํ๋ Publisher๋ค.
Subject๋ Publisher์ธ๋ฐ, ์คํธ๋ฆผ์ ๊ฐ์ ์ฃผ์ ํ ์ ์๋ค.
Combine์ ์ฌ์ฉํ์ฌ ๋ช ๋ นํ ์ฝ๋๋ฅผ ๋ง์ด๊ทธ๋ ์ด์ ํ ๋ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋ ์ ์๋ค.
send()
๋ฉ์๋ ํจ๋ฐ๋ฆฌ๋ฅผ ์ ๊ณตํ๋ค.
Output ํ์ ์ด
Void
์ผ ๋send()
๋ฉ์๋๋ก ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ผ๋ ์ ๋ฌํ ํ์๋ ์์์ ์๋ฆฐ๋ค.send(Void())
๋ฅผ ํธ์ถํ์ฌ Void ๊ฐ์ ์ ๋ฌํ๋ ๊ฒ๊ณผ ๋ค๋ฅด๊ฒ ๋์ํ๋ค.
send(_:)
๋ฉ์๋๋ก Subscriber์๊ฒ ๊ฐ์ ์ ๋ฌํ๋ค.send(completion:)
๋ฉ์๋๋ก Subscriber์๊ฒ ์๋ฌ ๋๋ ์ข ๋ฃ ์ ํธ๋ฅผ ์ ๋ฌํ๋ค.send(subscription:)
๋ฉ์๋๋ก Subscriber์๊ฒ ๊ตฌ๋ ์ ๋ณด๋ฅผ ์ ๋ฌํ๋ค.
Combine์์ Subject
๋ ํ๋กํ ์ฝ์ด๋ค. Publisher
ํ๋กํ ์ฝ์ ์ฑํํ๋ฉฐ, ๊ตฌ์กฐ์ฒด๋ ํด๋น ํ๋กํ ์ฝ์ ์ฑํํ ์ ์๋ค.
CurrentValueSubject
์ PassthroughSubject
๊ฐ ํด๋น ํ๋กํ ์ฝ์ ๊ตฌํํ๋ค.
์ผ๋ฐ์ ์ผ๋ก 'Hot Observable'์ ๊ฐ๋ ์ ๊ฐ๋๋ค.
RxSwift
RxSwift์๋ Subject์ ๊ฐ๋
์ด ์กด์ฌํ๋ค. ์ด๋ค์ SubjectType
ํ๋กํ ์ฝ์ ์ฑํํ๋ค.
AsyncSubject
/ BehaviorSubject
/ PublishSubject
/ ReplaySubject
๋ฑ์ด ์กด์ฌํ๋ค.
Combine์ CurrentValueSubject
๋ ์ด๊ธฐ๊ฐ์ ๊ฐ์ง๋ฏ๋ก RxSwift์ BehaviorSubject
์ ๋น๊ตํ ์ ์๋ค.
Combine์ PassthroughSubject
๋ ์ด๊ธฐ๊ฐ์ ๊ฐ์ง ์๊ณ ์ต๊ทผ์ ๋ฐํ๋ ์์๋ฅผ ๊ธฐ์ตํ๋ ๋ฒํผ๋ฅผ ๊ฐ์ง ์์ผ๋ฏ๋ก RxSwift์ PublishSubject
์ ๋น๊ตํ ์ ์๋ค.
ReactiveSwift
ReactiveSwift์๋ Subject์ ๊ฐ๋
์ด ์กด์ฌํ๋ค. Property
๋ผ๋ ์ด๋ฆ์ผ๋ก ๊ตฌํ๋์ด PropertyProtocol
ํ๋กํ ์ฝ์ ์ฑํํ๋ค.
Property
/ MutableProperty
๋ฑ์ด ์กด์ฌํ๋ค. Property
๋ ์ฝ๊ธฐ ์ ์ฉ์ธ ๋ฐ๋ฉด์ MutableProperty
๋ ์ฝ๊ณ ์ฐ๊ธฐ๊ฐ ๋ชจ๋ ๊ฐ๋ฅํ๋ค.
Combine๊ณผ RxSwift๊ฐ ์ด๊ธฐ๊ฐ์ ๊ฐ๋ Subject์ ์ด๊ธฐ๊ฐ์ ๊ฐ์ง ์๋ Subject๋ฅผ ๊ตฌ๋ถํด ๋์ ๋ฐ๋ฉด ReactiveSwift์ Property๋ ์ด๊ธฐ๊ฐ์ ๊ฐ์ง ์ ์๋ค.
๊ฐ Property์์ Signal ๋๋ SignalProducer๋ฅผ ๋ง๋ค ์ ์์ผ๋ฉฐ, ๊ฐ๊ฐ 'Hot Observable'๊ณผ 'Cold Observable'์ ๊ฐ๋ ์ ์ ์ฉํ๊ณ ์ถ์ ๋ ์ฌ์ฉํ ์ ์๋ค.
๋ฌธ์ํ๋ ํญ๋ชฉ
Last updated