본문 바로가기
Apple/Apple_Combine

[Combine Framework] Publisher, Subscriber, Upstream, DownStream 정리

by LeviiOS 2024. 7. 3.
반응형

퍼블리셔(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)**

구독자가 데이터를 받아서 처리하는 과정입니다.

반응형