티스토리 뷰

반응형

 

 

 

본 포스팅은 핑구님이 정리해주신 Combine 관련 포스팅을 통해 공부한 흔적입니다. 
핑구님 Combine 공부 포스팅 링크 ▼

 

[iOS] Publisher & Subscriber - Combine 공부 2

안녕하세요 Pingu입니다.🐧 지난 글에서는 간단하게 Combine이 뭔지에 대해 알아봤습니다. 간단히 다시 요약해보면 Apple에서 2019년에 만든 새로운 프레임워크인데, 이걸 쓰면 비동기 이벤트를 간단

icksw.tistory.com

 

 

 


 

 

 

 

Combine 기초, Publisher Subscriber 등 주요 구성요소, 역할

* 본 포스팅은 아래 핑구님의 블로그 내용을 참고해서 공부한 흔적입니다. 핑구님의 Combine 블로그 포스팅 링크 ▼ [iOS] Publisher & Subscriber - Combine 공부 2 안녕하세요 Pingu입니다.🐧 지난 글에서는

0urtrees.tistory.com

지난번 포스팅에서 Combine의 주요 구성요소, Publisher / Subscriber / Operator / Subscription을 알아봤습니다. 오늘은 이 주요구성 요소 중, Publisher와 Subscriber의 구독(Subscription) 간에 발생하는 동작방식에 대해서 알아보겠습니다.

 

 

 

 


Publisher와 Subscriber의 동작흐름, 방식 순서

Publisher는 값을 원하는 형태로 Subscriber에게 전달해줍니다. Subscriber는 Subscription을 호출하고, Publisher에게 값을 요청하여 필요할때 원하는Input을 받을 수 있습니다. 그 과정을 정리하면 위와 같습니다.

 

 

 

 


1) Publisher를 준비합니다.
2) Subscriber는 Publisher에게 값을 요청하면 달라고 합니다. (Subscribe 호출)
3) Publisher는 Subscriber에게 알겠다고 합니다. (Subscription 구독 호출)
4) Subscriber는 값이 필요할 때 Publisher에게  값을 요청합니다. (request 호출)
5) Publisher는 Subscriber에게 원하는 값을 전달합니다. (value 방출)
6) Publisher는 Subscriber에게 completion을 전달합니다. (completion 방출)

위와 같은 과정을 실제 playground에서 코드를 작성해본 후 다시 살펴보도록 하겠습니다. (아래 코드 또한 핑구님 블로그를 참고하여 공부했습니다.)

 

 

 


Publisher와 Subscriber, Subscription 동작흐름 순서 swift 코드로 알아보기

위 코드는 Int형 값을 방출하는 IntSubscriber라는 클래스의 구현코드입니다. 해당 클래스는 Subscriber의 역할을 하기 위해 Subscriber 프로토콜을 채택하여 사용하고 있습니다.

Subscriber 프로토콜을 준수하려면 위에 구현된 3개의 receive 메서드를 구현해야합니다. 각각 Subscription을 받거나, 값을 생성했음을 알림 받거나, completion을 받았을때 등의 event를 처리하는데 사용합니다.

 

 

 

 

앞서 말로만 했던 Subscriber와  Publisher 간의 동작흐름을 코드로 적어봤습니다. 1 ~ 5의 값이 들어있는 배열상수를 선언하고, 앞서 구현한 IntSubscriber의 생성자를 통해  Publisher 상수를 선언했습니다. 

배열 상수의 instance property로 publisher가 존재합니다. 해당 프로퍼티를 intArray에 대한 Sequence Publisher로서 사용이 가능합니다. 이어서 subscribe 메서드와 인자로 앞서 선언한 intSubscriber를 사용하여 구독을 진행할 수 있습니다.

intArray.publisher라는 Sequence Publisher가 intSubscriber라는 Subscriber에게 구독이 되었음을 알려주고, 1 ~ 5의 값을 차례대로 Subscriber에게 줍니다. 이후, 더이상 줄 값이 없으면 completion event를 전달하고 끝이납니다.

이러한 Publiisher와 Subscriber 간의 동작방식을 순서대로 보자면, 아래와 같습니다.

1) IntSubscriber를 생성합니다.
2) Sequence Publisher의 subscribe 메서드를 통해 Subscriber는 Publisher에게 값을 요청하면 달라고 얘기합니다.
3) Publisher는 Subscriber에게 Subscription을 만들어서 전달합니다. (receive(subscription))
4) Subscriber가 Subscription을 받으면, 이후 Publisher에게 값을 달라고 내부적으로 요청합니다. (request(_:))
5) Publisher는 Subscriber에게 값을 전달합니다. ([1, 2, 3,  4, 5] 값을 순서대로 전달)
6) Publisher가 Subscriber에게 줄 수 있는 값이 더이상 없으면, completion event를 Subscriber에게 전달합니다.

위 코드를 실행하면 출력되는 로그는 최종적으로 아래와 같습니다. 

 

 


 

 

 

 

 

반응형
댓글
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함