ReplaySubject
๐ ReplaySubject โ ๊ฐ N๊ฐ๋ฅผ โ๋๊ฐ๊ธฐโํ๋ ์บ์ Subject
ํต์ฌ ํค์๋: Buffer Size ยท Hot Stream ยท Late Subscriber Catchโup
ReplaySubject<Element>
๋ ์ง์ ํ ๋ฒํผ ํฌ๊ธฐ๋งํผ ๊ณผ๊ฑฐ ๊ฐ์ ์ ์ฅํ์ฌ, ์๋ก์ด ๊ตฌ๋
์์๊ฒ ํ๊บผ๋ฒ์ ์ฌ์(Replay)ํฉ๋๋ค. ๋์์ ํ๋ ์ด์ด์ โ๋๊ฐ๊ธฐโ์ฒ๋ผ ์ด์ ์ด๋ฒคํธ ์ปจํ
์คํธ๊ฐ ์ค์ํ ๋ ์ ์ฉํฉ๋๋ค.
1๏ธโฃ ํน์ง ํ๋์ ๋ณด๊ธฐ
์ด๊ธฐ๊ฐ
โ (์ต์ )
๋ฒํผ ํฌ๊ธฐ
1 ~ โ (bufferSize:
)
๊ตฌ๋ ์ ์ ๋ฌ
๋ฒํผ ๋ด ๋ชจ๋ ์ด๋ฒคํธ ์ฌ์ ํ ์ค์๊ฐ ์์
์คํธ๋ฆผ ์ข ๋ฃ
.onCompleted()
/ .onError()
ํ ๋ฒํผ ํด์
๋ฒํผ ํฌ๊ธฐ๋ฅผ
Int.max
๋ก ์ค์ ํ๋ฉด ์ ์ฒด ๊ธฐ๋ก์ ์ฌ์ํ ์ ์์ผ๋ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ์ ์ํ์ธ์.
2๏ธโฃ ๊ธฐ๋ณธ ์ฌ์ฉ ์์
// ์ต๊ทผ 2๊ฐ ๊ฐ ์บ์
let subject = ReplaySubject<String>.create(bufferSize: 2)
let bag = DisposeBag()
subject.onNext("1๏ธโฃ One")
subject.onNext("2๏ธโฃ Two")
subject.onNext("3๏ธโฃ Three")
// ๊ตฌ๋
์๋ Two, Three๋ถํฐ ์์
subject
.subscribe(onNext: { print($0) })
.disposed(by: bag)
subject.onNext("4๏ธโฃ Four")
์ถ๋ ฅ
2๏ธโฃ Two
3๏ธโฃ Three
4๏ธโฃ Four
3๏ธโฃ ์ค์ ํจํด โ ์ฑํ
๋ฉ์์ง ์บ์ฑ
final class ChatRoomService {
private let messageSubject = ReplaySubject<Message>.create(bufferSize: 50)
private let bag = DisposeBag()
// ์ธ๋ถ ๋
ธ์ถ ์คํธ๋ฆผ
var messages: Observable<[Message]> {
messageSubject
.scan([]) { acc, new in acc + [new] }
}
func receive(message: Message) {
messageSubject.onNext(message)
}
}
// ์๋ก ๋ค์ด์จ ์ฌ์ฉ์๋ ์ต๊ทผ 50๊ฐ ๋ฉ์์ง ์ฆ์ ํ์ ๊ฐ๋ฅ
4๏ธโฃ ๋ฉ๋ชจ๋ฆฌ & ํผํฌ๋จผ์ค ์ต์ ํ
๋ฒํผ ํฌ๊ธฐ: ์ค์ UI/๋น์ฆ๋์ค ์๊ตฌ ๋ฒ์๋ก ์ ํ โ ๋ฌด์ ํ X.
windowTime:
: ์๊ฐ ๊ธฐ๋ฐ ์บ์ฑ(create(bufferSize:timeScheduler:)
)๋ก ์ค๋๋ ๋ฐ์ดํฐ ์๋ ์ ๊ฑฐ.์คํธ๋ฆผ ์ข ๋ฃ ์ฒ๋ฆฌ: ๋ฐฉ ๋๊ฐ๊ธฐ ๋ฑ ํ์ ์
.onCompleted()
ํธ์ถํด ๋ฒํผ ํด์ .
5๏ธโฃ Subject ๊ฐ ๋น๊ต ์์ฝ
PublishSubject
0
โ
๋ฒํผ ํญ, ์๋ฆผ
BehaviorSubject
1
โ๏ธ
ํ ๊ธ ์ํ, Form Validation
ReplaySubject
n
โ
์ฑํ ํ์คํ ๋ฆฌ, ๋ก๊ทธ ์ฌ์
AsyncSubject
1 (์๋ฃ ์์ )
โ
ํ์ผ ์ ๋ก๋ ๊ฒฐ๊ณผ, ๋จ์ผ ์๋ต
6๏ธโฃ Mini Quiz
๋ฒํผ ํฌ๊ธฐ๋ฅผ
3
์ผ๋ก ์ค์ ํ๋๋ฐ ์ด๋ฒคํธ๋ฅผ 5๊ฐ ๋ฐํ ํ ์๋ก ๊ตฌ๋ ํ๋ฉด ๋ช ๊ฐ๋ฅผ ๋ฐ๋์?ReplaySubject
์ ๋ฒํผ๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณผ๋ํ๊ฒ ์ฌ์ฉํ์ง ์๋๋ก ๋ ๊ฐ์ง ์ต์ ํ ๋ฐฉ๋ฒ์?Combine์์ ๋์ผํ ๊ธฐ๋ฅ์ ๋ด๋นํ๋ Subject๋?
๋ค์ ๋ฌธ์ โถ๏ธ AsyncSubject ๋ก ์ด๋ํด ์๋ฃ ์์ ๋จ์ผ ๊ฐ ์ ๋ฌ ํจํด์ ์์๋ด ๋๋ค. ๐
Last updated