반응형
퍼블리셔(Publisher):
• 퍼블리셔는 데이터를 생성하고 배포하는 역할을 합니다. 예를 들어, 서버에서 데이터를 받아오는 작업을 수행할 수 있습니다. 퍼블리셔는 구독자(subscriber)에게 데이터를 전달합니다.
2. 구독자(Subscriber):
• 구독자는 퍼블리셔로부터 데이터를 받아 처리하는 역할을 합니다. 구독자는 퍼블리셔에 연결되어 데이터를 수신하고, 이를 사용하거나 다른 작업을 수행할 수 있습니다.
3. 업스트림(Upstream):
• 업스트림은 데이터가 시작되는 쪽을 의미합니다. 즉, 퍼블리셔 쪽을 업스트림이라고 부릅니다. 퍼블리셔는 데이터를 생성하여 구독자에게 전달합니다.
4. 다운스트림(Downstream):
• 다운스트림은 데이터가 도착하는 쪽을 의미합니다. 즉, 구독자 쪽을 다운스트림이라고 부릅니다. 구독자는 퍼블리셔로부터 데이터를 받아 처리합니다.
예시
import Foundation
import Combine
// 퍼블리셔 생성: URL로부터 데이터를 가져오는 퍼블리셔
let url = URL(string: "https://example.com/audiofile.mp3")!
let session = URLSession.shared
// 퍼블리셔
let publisher = session.dataTaskPublisher(for: url)
.map { $0.data }
.eraseToAnyPublisher()
// 구독자 생성: 데이터를 처리하는 구독자
let subscriber = Subscribers.Sink<Data, URLError>(
receiveCompletion: { completion in
switch completion {
case .finished:
print("완료됨")
case .failure(let error):
print("에러 발생: \(error)")
}
},
receiveValue: { data in
print("데이터 수신: \(data.count) 바이트")
}
)
// 퍼블리셔와 구독자 연결 (업스트림 -> 다운스트림)
publisher.subscribe(subscriber)
**퍼블리셔(Publisher)**
session.dataTaskPublisher(for: url)로 데이터를 생성합니다. URL로부터 데이터를 가져오는 작업을 수행합니다.
**업스트림(Upstream)**
퍼블리셔가 데이터를 생성하는 과정입니다. 데이터가 생성되어 구독자로 전달됩니다.
**구독자(Subscriber)**
Subscribers.Sink로 데이터를 수신하고 처리합니다.
**다운스트림(Downstream)**
구독자가 데이터를 받아서 처리하는 과정입니다.
반응형