2024년 5월 10일 • ☕️ 1 min read
DataStream이나 event를 생성(발행)하고 구독자에게 전달하는 역할을 하는 객체.
시간에 따라 연속적으로 발생하는 데이터 시퀀스
**로, Publisher에서 Subscriber까지 이어지는 데이터의 흐름을 말함A Publisher
→ B Publisher
→ C Publisher
가 있다면 A는 B에게, B는 C에게 UpStream이고 B는 A에게 C는 B에게 DownStream이다. 즉 Publisher는 UpStream이 될 수도, DownStream이 될 수도 있다..finished
/ .failure
/ 명시적인 구독 취소
3가지 방법으로 종료될 수 있다.개발할 때는 Publisher을 채택한 다양한 내장 Publisher들을 사용하거나 sink같은 고수준 API를 주로 사용한다. 그렇기에 Publisher가 어떻게 구성되어 있는지 안다면 더 활용하기 편리할 수 있다.
@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *)
public protocol Publisher<Output, Failure> {
associatedtype Output
associatedtype Failure : Error
func receive<S>(subscriber: S) where S : Subscriber, Self.Failure == S.Failure, Self.Output == S.Input
}
Publisher는 Output
/ Failure
2가지 제네릭 타입을 반드시 가져야 한다. Output은 Publisher가 발행할 타입이고, Failure는 Publisher가 발행할 수도 있는 에러입니다. Failure는 Error타입을 준수하는 어떤 타입이든 상관없이 Failure가 될 수 있기 때문에 사용자 정의 에러를 넣을 수 있다. 이렇게 타입을 확실하게 명시하기 떄문에 타입 안정성이 보장
된다.
receive
메서드는 Publisher가 Subscriber을 받을 때 호출되면 Publisher가 Subscriber에게 Subscription 인스턴스를 전달하면서 구독을 시작한다. 여기서 Subscription인스턴스는 Publisher와 Subscriber 사이의 구독 생명주기를 관리하는 객체입니다.