Combine 기본 개념
https://developer.apple.com/documentation/Combine
Apple Document 의 Combine 을 보면 다음과 같이 설명된다.
( 번역이 미숙하지만... )
- 이벤트 처리 연산자들을 통해 비동기 이벤트들을 핸들링 할 수 있게 하는 것
컴파인 프레임워크는 시간에 따른 값 처리 Swift API 를 제공한다. 여기서 값이란, 많은 종류의 비동기 이벤트들이 될 수 있다. 컴바인은 시간에 따른 값을 제공 할 수 있는 원타임카지노s 와 원타임카지노s 로부터 해당 값들을 받는 subscribers 로 정의 된다.
원타임카지노 프로토콜은 시간에 따른 값의 흐름을 전달할수 있는 프로토콜이다. 원타임카지노 는 값을 받아 처리하고 다시 전달하는 연산자들을 가진다.
원타임카지노s 체인의 끝에서, subscribers 는값을 수신받을때 동작된다. 원타임카지노s 는 subscribers 가 요청한 경우에만 값을 내보낸다. 이를 통해 우리가 만드는 subscribers 코드는 언제 값을 수신하고, 원타임카지노s 와 연결될지 정할수 있게 된다.
여러개의 원타임카지노s 의 출력을 조합 및 상호 작용하도록 작성할수 있다. 예를 들어, 텍스트 필드 원타임카지노 를 subscribe 하고 이 값의 변화에 따른 url 요청을 할 수 있다. 그 다음 응답을 처리하는 다른 원타임카지노 를 사용하고 앱에 결과를 반영 할 수 있다.
컴바인을 채택해서 이벤트 처리 코드들을 중앙 집중화 하고, (중첩 클로저나, 다른 타입들을 가진 콜백들)과 같은 문제들을 제거하고 코드를 읽기 쉽게 유지 관리 할 수 있다.
여기까지 애플 컴바인 문서의 첫장의 개요 내용이다.
코드의 중앙집중화란? ( Centeralizing Code )
https://www.oreilly.com/library/view/actionscript-the-definitive/1565928520/ch09s12.html
덧붙여, 아래의 링크에서 소개된 내용은 다음과 같다.
컴바인 프레임워크는 앱의 이벤트들을 어떻게 처리할지 선언적 접근 방식을 제공한다.
delegate 콜백을 여러개를 등록해서 처리하거나 여러개의 completion handler 를 이어 처리하는 대신, 주어진 이벤트 소스에 대해 단일 처리 로직을 (위에서의 예시처럼 체인해서) 활용할 수 있다.
https://developer.apple.com/documentation/combine/receiving-and-handling-events-with-combine
예제
아주 간단한 테스트를 통해 원타임카지노 와 Subscriber 프로토콜에 대해 이해해 보자.
요즘 핫한 클럽하우스를 예제로 방에서 손드는 이벤트를 만들어 보자.
예제 결과
jack
tom
completed
Publisher 프로토콜을 따르는 ClubHouseHandsUp 클래스는 비동기 이벤트를 만들어 subscriber 에게 전달한다. subscriber 가 구독을 시작하면 ( sink ) 이벤트 두개를 만들고 종료된다.
publisher 를 쉽게 만들수 있도록 Combine 에서 제공하는 publisher 들은 아래와 같다.
- 단일 이벤트와 종료 혹은 실패를 제공하는 원타임카지노
위와 같이 사용가능하다.
마지막 예제처럼 Error 가 없이 사용하려면 Never 와 같이 사용하면 되며 이 경우 sink 를 completion 블럭 없이 사용가능하다.
- 단일 이벤트 발생 후 종료되는 원타임카지노
- 구독이 이뤄질때 publisher 가 만들어 질수 있도록 하는 publisher
defferd 를 만들었을때에 아직 ClubHoseHandUp 원타임카지노 가 생성되지 않은걸 볼수 있다.
원타임카지노 가 먼저 만들어 질 필요가 없을때 ( 메모리를 많이 필요로 하거나 할때? ) 사용하면 좋을것 같다.
- 이벤트 없이 종료되는 원타임카지노
https://gist.github.com/tilltue/fcbf82f91983a07ec1b38efc71217409
- 오류와 함께 종료되는 원타임카지노
- 입력과 완료를 기록해 후에 다른 subscriber 에서 반복될수 있는 원타임카지노
결과를 보면 make recording 은 한번만 불려진걸 볼 수 있다.
( 원타임카지노 share 랑은 어떤 차이인지 나중에 알아봐야겠다. )
여기까지 Combine 의 개요, 그리고 기본 publisher 들에 대해 알아봤다.
+ 참고로 보면 좋은 영상
https://developer.apple.com/videos/play/wwdc2019/721/
2019 년 WWDC 에서 발표된 "Combine in Practice" 영상이다.
마침.