[WWDC 19 / Combine] Combine 소개하기 with Subscribers

박준혁 - Niro·2023년 10월 24일
1

WWDC

목록 보기
2/11
post-thumbnail

안녕하세요 Niro 🚗 입니다!

앞서 Combine 에 대해 소개와 함께 Publisher 에 대해 알아보았습니다.

안읽고 오신분이 있으시다면?

🔗 [WWDC 19 / Combine] Combine 소개하기 with Publisher

를 읽고 와주시면 좋을거 같습니다!

자 이번엔 두번째 편으로 Subscribers 에 대해 설명하겠습니다!


1. Subscribers - 구독자

이름 그대로 Publisher 가 유한한 경우 완료됨과 함께 값을 받는 것입니다.

Subscriber 는 일반적으로 값을 받게되면 State 를 실행하고 변경하기 때문에 Swift 에서는 참조 유형을 사용하게 됩니다

즉, Class 를 의미한다는 것이죠!

그럼 어떤 구조를 갖고 있는지 볼까요?

1-1. Subscriber 의 구조

Protocol 로 선언이 되어 있고 InputFailure 라는 두가지 유형이 존재합니다.

Publisher 와 마찬가지로 Subscribers 가 Failure 를 수신할 수 없는 경우 Never 를 사용할 수도 있습니다.

Subscriber 는 3가지 주요한 메서드를 갖고 있고 구독을 할 수 있는 역할을 합니다.

첫번째, 구독은 Subscribers 가 Publisher 에서 Subscribers 의 데이터 흐름을 제어하는 방법입니다.

두번째, Input 을 받을 수도 있습니다.

세번째, 연결된 Publisher 가 유한한 경우 Completion 또는 Failure 인 Completion 을 받을 수 있습니다.


이렇게 보기만 해서는 이해가 잘 안가니까.. 어떻게 활용하는지 예시를 봅시다!

1-2. Subscriber 의 예시

Assign 은 Class 이며 클래스 인스턴스, 개체 인스턴스 및 해당 개체로의 type safe key path 로 초기화 됩니다.

type safe key path 란?

Swift 프로그래밍 언어의 특징 중 하나로 속성 또는 서브스크립트에 대한 경로를 나타내고 해당 경로가 타입 안전하다는 것을 보장합니다.

즉, Type safe keypath 를 사용하면 속성값을 가져오거나 설정할 때 컴파일러가 타입 불일치 오류를 방지하고 안전하게 처리할 수있다는 것입니다.

또한 입력을 받으면 해당 객체의 해당 속성에 Input 을 할당하게 됩니다.

Swift 에서는 속성 값만 작성할 때 오류를 처리할 방법이 없기 때문에 실패 유형인 Assign 을 Never 로 설정하게 됩니다.


2. Publisher 와 Subscribers 가 동작하는 Pattern

Subscriber 는 Publisher 에게 구독 요청을 보내게 됩니다.

요청을 받게 되면 Publisher 는 Subscriber 에게 구독 정보를 전송하고, 해당 Subscriber 는 Publisher 로 부터 특정 개수의 값 또는 무제한의 값을 요청하는데 사용하게 됩니다.

그 시점에서, Publisher 는 N 개의 값 또는 그보다 적은 값을 Subscriber 에게 전송할 수 있습니다. Publisher가 유한한 경우, 결국 완료 또는 오류를 보낼 것입니다.

다시 말해, subscription 하나, 0이거나 여러개의 값, 단일 Completion 이 있습니다.


3. Wizard App Example

원래 우리가 만들고자 했던 App 에 대해 다시 생각해봅시다.
Wizard 라는 Model Object 가 있고 해당 마법사가 몇학년에 속해있는지가 관심사 입니다!

코드를 보게 되면 5학년인 Merlin 이 보입니다.

여기서 우리가 원하는 동작은 학생들이 졸업에 대한 알림을 수신하는 것과 학생들이 졸업하면 model Object 의 값을 업데이트 하는 것입니다!

merlin 졸업에 대한 NotificationCenter 의 Pulisher 를 통해 gradutionPublisher 를 만들어줍니다.

Publisher 를 만들었으니 구독을 해주어야겠죠?

Assign Subscriber 를 생성해주고 Merlin 의 grade 속성에 새로운 값을 입력하도록 합니다.

Publisher 와 Subscriber 를 만들었으니 subscribe 메서드를 통해 연결을 시켜줍니다.

역시.. 코드는 오류가 안나고 한번에 실행되는게 이상하죠..?
오류 내용을 보게되니 유형이 일치하지 않아 오류가 발생한 것으로 보입니다.

NotificationCenter 의 Publisher 에서 Output 은 Notification 을 갖고 있습니다.

하지만 구독 정보를 받는 Subscriber 의 Input 은 Merlin 객체의 grade 속성에 입력하도록 구성되어있기 때문에 Assign 에는 정수가 필요합니다.

즉, 우리에게 필요한 것은 Notification 과 Int 간 변환을 해주어야한다는 것입니다.

그것이 바로! Operators 라는 것이지만.. 내용이 워낙 길기 때문에 다음 글에서 다룰 수 있도록 하겠습니다!


4. 정리하자면..

우리는 오늘 Subscriber 에 대해 알아보았습니다.

Publisher 를 구독하고 생성하는 값을 처리하고 필요한 작업을 수행하는 역할을 갖고 있습니다.

비동적인 데이터 흐름을 효과적으로 관리를 할 수 있도록 도와줄텐데.. 아직 잘 와닫지는 않네요..

아쉽지만 다음에 Operator 를 살펴보고 Subscriber 에 대해 더 알아봐야 할거 같습니다!

다음 글도 기다려주시고 긴 글 읽어 주셔서 감사합니다!

참고 문헌

🔗 WWDC 19 - Introducing Combine

profile
📱iOS Developer, 🍎 Apple Developer Academy @ POSTECH 1st, 💻 DO SOPT 33th iOS Part

0개의 댓글

관련 채용 정보