2019 WWDC - Introducing Combine 영상을 보고 정리한 내용입니다.
영상에서는 한 가지 앱을 예시로 들고 있습니다.
흔히 볼 수 있는 아이디와 비밀번호를 등록하는 화면입니다. 하지만 여기서 중요한 포인트는 바로 모든 입력이 들어왔을 때 버튼이 활성화된다는 점입니다. 이 부분에 대해서는 Operator 부분에서 다루도록 하겠습니다.
Cocoa SDK에는 다양한 비동기 인터페이스가 존재합니다.
1. Target / Action
2. Notification Center
3. URLSession
4. KVO(Key - Value - Observing)
5. Ad - hoc callbacks
다양한 인터페이스를 조합해서 사용하는 것은 어렵습니다. 그렇기 때문에 영상에서 발표자는 Combine의 핵심 을 Composition이라고 소개합니다.
Combine의 특징들을 어떻게 활용할 수 있는지에 대해서는 Combine의 Concept을 확인해 보면서 알아보겠습니다.
먼저 Publishers에 대해 알아보겠습니다.
값과 오류를 직접 생성하는 게 아니라 생성되는 방식을 설명하는 타입입니다.
Publisher의 핵심은 구독자를 등록할 수 있다는 점입니다.
Publisher가 존재한다면 값과 Completion을 받을 수 있습니다. 값이 있다면 자신의 상태를 변경합니다.
Subscriber에는 Assign이라는 서브 클래스도 존재합니다.
Assign은 Input을 keyPath로 표시된 경로에 할당하는 역할을 합니다.
Publisher와 Subscriber 사이의 흐름을 보면 위 이미지와 같습니다.
Subscriber는 Publisher에게 요청을 보내기 위해서는 구독 권한을 받아야 합니다. 요청을 받은 Publisher는 Subscriber에게 Value와 Completion을 보냅니다.
이러한 흐름을 위 예제 앱에 대입해 보겠습니다.
위 코드에는 한가지 에러가 존재합니다. 바로 우리가 Subscriber에 할당해야 하는 값은 Merlin의 학년입니다. Int 타입이 아닌 Wizard 타입이 할당되기 때문에 에러가 발생합니다.
그렇다면 우리는 Int 타입으로 변환하는 작업이 필요합니다. 그러한 작업을 설명하는 것이 Operator입니다.
Operator는 Publisher를 채택한 타입입니다. upstream
과 downstream
을 통해 결과를 Subscriber에 전달합니다.
upstream : Publisher를 구독
downstram : 결과를 Subscriber에 전달
Operator의 종류는 정말 많습니다. 먼저 Declareative Operator API에 대해 알아보겠습니다.
다양한 Operator를 탐색하기 위해 Combine은 동기식 API를 비동기식 API로 매핑합니다.
하나의 숫자를 사용하기 위해서는 Int타입을 사용하고 여러 숫자를 사용하기 위해서는 Array 타입을 사용합니다. 이러한 일반적인 타입들을 각각 Future, Publisher로 매핑합니다.
위에서 언급한 Combine의 특징 중 하나인 Generic과 연관되어 있다고 생각합니다. 우리가 Int, String 같은 타입을 하나의 Future 타입으로 매핑하고 있기 때문입니다.
이제 위에서 발생한 문제를 해결하기 위해 Operator 중 하나인 Map에 대해 간단히 설명해 보겠습니다.
Map 타입은 Publisher의 Output을 우리가 원하는 형태의 Output 형태로 변경하는 역할을 합니다.
Operator를 적용하면 아까 에러가 발생한 코드에 적용하면 아래 이미지처럼 에러가 발생하지 않는다는 것을 알 수 있습니다.
오늘은 WWDC에서 처음 Combine을 소개한 영상을 정리해 봤습니다. 아직 부족한 부분도 많지만 앞으로 Combine을 공식 문서를 정리하며 채워나가겠습니다.
Combine을 공부하기 좋은 자료가 있다면 댓글로 공유 부탁드립니다....
많은 도움이 되었습니다, 감사합니다.