Combine은 Apple의 공식 프레임워크로, RxSwift와 동작하는 방식이 비슷합니다. RxSwift는 MS사에서 파생된 것으로, 애플이 독자적인 라이브러리를 만들기 위해 내놓은 것이라 생각해도 좋습니다.
RxSwift가 UIKit을 위한거라면, Combine은 SwiftUI를 위한 툴이라고 생각하면 됩니다.
Combine은 애플에서 내놓은 라이브러리인만큼, 코드에 통합하기가 쉽다는 장점이 있습니다. RxSwift는 외부 라이브러리이기 때문에 Extension으로 기능을 구현해 사용되는 것처럼, 코코아 프레임워크와 통합하기 위해 많은 노력이 필요합니다.
let publisher = NotificationCenter.default
.publisher(for: myNotification, object: nil) // 요런 식으로 사용하기가 굉장히 좋음
RxSwift와 상당히 비슷합니다. Publisher, Operator, Subscriber 세 가지입니다.
Publisher
: 값 또는 요소를 보내는(emit) 역할입니다.Operator
: Publisher 프로토콜에 선언되어 있으며, 같거나 새로운 Publisher를 반환하는 메소드입니다. Operator들을 체이닝해서 사용할 수 있습니다.Subscriber
: 소비자를 의미합니다. 전달받은 value나 completion event로 작업을 수행합니다.Publisher는 어떠한 요소(element)를 시간 흐름에 따라 방출합니다.
즉, 값 또는 요소를 보내는(emit) 역할입니다. RxSwift의 Observable
과 비슷한 개념입니다.
.publisher
을 이용해 생성할 수 있습니다.
let myNotification = Notification.Name("MyNotification")
let publisher = NotificationCenter.default
.publisher(for: myNotification, object: nil)
동작 방식은 다음과 같습니다.
위 그림과 같이 1초에 4를, 5초에 8을, 10초에 15를, …처럼 시간에 따라 값을 방출하는 Publisher
가 있다고 해 봅시다.