콤바인 이전, 상태변화에 대한 비동기처리는 여러 방법으로 나뉘어져 있었다. 컴파인은 이렇게 여러방법으로 처리되던 비동기+상태관리를 타노스마냥 한 방에 처리해주는 녀석이다.(주의할 점: iOS13부터 사용할 수 있다.)
Rx의 심장이 Observable인 것처럼 Combine의 심장은 Publisher 라고 볼 수 있다. Publisher가 방출하는 이벤트를 받는 녀석은 subscriber이다. Publisher 가 방출하는 이벤트를 Subscriber가 받는 과정은 위와 같이 진행된다. 이때 2번은 프레임워크 내부적으로 동작하는거라 개발자 입장에서는 크게 신경쓰지 않아도되는 부분이다.
Publisher는 프로토콜로 되어있다. 내부를 살펴보자. FRP의 모나드 개념을 적용시켜 associatedType 으로 정의된 Output과 에러타입을 채택하고 있는 Failure가 선언되어 있다. 구독을 하게되면 Publisher 와 Subscriber는 반드시 Output 과 Faliure 가 연결되게 된다.
Subscriber는 Publisher에서 뽑아오고 싶은 Ouput을 요청하기 위해 Inputr 과 Failure 가 선언되어있다. 여기서 CustomCombineIdentifierConvertible 프로토콜은 Publiser, Subscriber 를 인스턴스로 만들어도 각각 구별할 수 있게 식별자를 부여해주는 역할을 수행한다.
Subscription 프로토콜은 Publisher 와 Subscriber 사이의 생명 주기를 관리하며, 데이터 스트림의 흐름을 제어하는 데 사용된다. Subscription은 Subscriber가 Publisher로부터 데이터를 받기 시작할 때 생성되며, Subscriber가 더 이상 데이터를 받고 싶지 않을 때까지 유지된다. Subscription 프로토콜을 통해 "데이터 요청" 과 "구독 취소"를 수행할 수 있다. 데이터 요청은 보이는 request 메서드에서 한다고 했을 때 구독취소는 어디서 하는걸까? 바로 Cancellable 프로토콜이다.
Canecllalve 프로토콜 내부에서는 위와 같이 cancel 메서드를 정의하고 있고 subscription 프로토콜은 이 프로토콜을 채택함으로써 구독취소 역할도 수행하게 된다. Rx에서 disposeBag 에 담아 해제시켜주는 것처럼 Combine에서는 AnyCancellable로 자주 사용된다.
기본적인 구성을 살펴봤다면 예제코드를 통해 어떻게 코드로 작성되는지 보자. Publisher를 일종의 노티피케이션 센터라고 생각해보자. 실제로 노티피케이션 센터에 Combine 코드를 쓸 수 있다. 노티피케이션 센터를 퍼블리셔로 만들고 sink를 통해 구독한뒤 노티피케이션 메서드인 post를 통해 이벤트를 던지면 위와 같은 결과를 얻을 수 있다.
https://www.kodeco.com/5429795-reactive-programming-in-ios-with-combine/lessons/1
Reactive Programming in iOS with Combine, Episode 1: Introduction
Welcome to the course! Find out a bit about the history of reactive programming, and a high level overview of Combine.
www.kodeco.com
'Flutter' 카테고리의 다른 글
| Combine | 2. Operators and Subjects (0) | 2024.05.07 |
---|---|
ViewController의 생명주기 (0) | 2024.05.06 |
UserDefaults 를 사용할 때 객체에 Codable 을 채택한 이유 (0) | 2024.05.05 |
| WWDC 19 | Introducing SwiftUI - Building Your First App (0) | 2024.04.23 |
WWDC 19 SwiftUI Essentials (0) | 2024.04.22 |