ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Combine - Subscriber
    Combine 2022. 2. 24. 10:45

    안녕하세요. 그린입니다🟢

    이번 포스팅에서는 Combine의 Subscriber라는 것에 대해 학습해보겠습니다🙋🏻

     

    우선 이전 포스팅에서 Publisher에 대해 알아보면서 Subscriber와 뗄레야 뗄 수 없어서

    같이 설명하는 느낌이 있어서 어떻게 보면 했던 학습 반복일 수도 있습니다.

    그렇지만 그보다 이번에 조금 더 Subscriber에 초점을 맞춰 학습해보려해요🚀

    (Publisher에 대해 못보신 분이 있다면 아래 포스팅을 참고해주세요!)

    https://green1229.tistory.com/221

     

    Combine - Publisher

    안녕하세요. 그린입니다🟢 오늘부터 진행될 포스팅은 combine에 관한겁니다🙋🏻 이전에 RxSwift에 대해서는 여러 목차로 순차적으로 진행한적이 있습니다! 그것과 유사하게 combine도 한번 쉬운것

    green1229.tistory.com

    Subscriber?

    Subscriber는 Publisher와 반대되는 개념 및 용어로 Publisher를 구독하는 구독자라는 의미를 가집니다.

    즉 Publisher로부터 입력을 받을 수 있는 형식을 선언하는 프로토콜입니다.

    라이프 사이클 이벤트와 함께 Subscriber에서 스트림을 수신하게 됩니다.

    protocol Subscriber : CustomCombineIdentifierConvertible

    Subscriber의 공식문서를 보면 이렇게 선언되어 있어요.

    즉 CustomCombineIdentifierConvertible 프토코로을 상속받습니다.

    CustomCombineIdentifierConvertible?

    Subscriber에서 상속받는 CustomCombineIdentifierConvertible 프로토콜이 대체 뭘까요?

    Publisher 스트림을 고유하게 식별하기 위한 프로토콜이라고 합니다.

    Subscriber 개발도구가 앱에서 Publisher 체인을 고유하게 식별할 수 있도록 요 프로토콜이 해내줍니다.

    우선 요정도로 알아도 충분할것 같네요!

    Publisher와 Subscriber 사이 값/에러 주고받기

    Publisher에서 Output과 Failure를 방출해요.

    즉 여기서 Output은 방출하는 값 타입이고 Failure는 방출할 수 있는 에러 타입을 나타내요.

    그럼 Subscriber에서는 Input과 Failure를 가집니다.

    Input은 방출된 값을 수신 받을 수 있는 값의 타입이고 Failure는 방출된 에러를 수신 받을 수 있는 에러 타입입니다.

    즉 Publisher와 Subscriber 사이 유기적인것이 확인됩니다🙌

    Subscriber의 메서드

    Subscriber에서는 3개의 메서드가 있습니다.

    해당 메서드들로 값을 수신하고 처리합니다.

    이 메서드에 대해 하나씩 알아보시죠!

     

    1. receive(subscription:)

    아마 이전 포스팅에서도 다룬적이 있는데 이 메서드는 Publisher가 준 구독권을 받는것입니다.

    즉 Publisher와 Subscriber를 연결하는 subscribe(_:) 함수 호출 후 Publisher가 호출하게 됩니다.

    즉 위에서 말한 구독권은 Subscription이라는 인스턴스이고 이걸 Subscriber에게 전달해주는것이죠!

    좀 더 자세히는 Subscription 프로토콜이 있고 그 안에 있는 request, cancel 메서드로 좀 더 구독정보에 대한

    요청과 구독 취소등이 존재하는데 그건 아래에서 같이 다시 확인해보시죠!

     

    2. receive(_:)

    Publisher에서 이제 방출된 값을 Subscriber에서 받기 위해 호출되는 메서드입니다.

    이전에 request 메서드를 통해 어떤 값을 얼마나 받을지와 같은 정보들이 이뤄집니다.

     

    3. receive(completion:)

    Publiser에서 정상적으로 값이 방출되었는지 혹은 에러가 났는지 노티를 주기 위해 호출하는 메서드입니다.

    즉 이 메서드로 정상 혹은 에러가 Subscriber에게 전달되겠죠.

    Subscription 프로토콜

    Subscription은 Publisher와 Subscriber의 연결을 해주는 프로토콜입니다.

    즉 구독권이라고 생각하면 좋겠네요!

    Subscription은 Publisher와 Subscriber를 연결해주는 고유 식별자의 역할을 해줘야하기 때문에

    오로지 클래스 객체로만 가능합니다. 

    Subscription의 메서드

    Subscription에는 두가지 메서드가 존재합니다.

     

    1. request(_ demand: Subscriber.Demand)

    우리가 계속 다뤘던 구독권에 대한 정보 설정과 비슷합니다.

    어떤 값을 받을지 얼마나 받을지를 요 메서드를 통해 이뤄집니다.

     

    2. cancel()

    Subscriber가 Publisher에서 더는 값을 수신하지 않겠다 할때 사용합니다.

    해당 메서드를 통해 취소해줍니다.

    만약 해당 메서드를 통해 취소해주지 않는 즉 묵시적인 취소를 한다면 Publisher에서 값이 다 방출되고

    complete될때까지 Subscription 인스턴스가 계속 메모리에 남게됩니다.

    마무리

    이렇게 오늘도 combine의 두번째 파트인 subscriber에 대해 알아봤어요!

    알고 있는걸 좀 더 자세히 정리해봤다고 할 수 있겠네요🙌

    역시 딥하게 공부해보니 모르는것도 있었고 좀 더 교정이 되어서 좋았습니다!

    항상 해도 어려운 공부... 화이팅!

     

    [참고자료]

    https://developer.apple.com/documentation/combine/subscriber

     

    Apple Developer Documentation

     

    developer.apple.com

    https://developer.apple.com/documentation/combine/customcombineidentifierconvertible

     

    Apple Developer Documentation

     

    developer.apple.com

    https://developer.apple.com/documentation/combine/subscription

     

    Apple Developer Documentation

     

    developer.apple.com

     

    'Combine' 카테고리의 다른 글

    Combine - Cancellable  (2) 2022.03.10
    Combine - Scheduler  (0) 2022.03.07
    Combine - Subject  (0) 2022.02.28
    Combine - Publisher  (0) 2022.02.22
    Combine  (0) 2021.06.09
Designed by Tistory.