Combine

Combine - Subscriber

GREEN.1229 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