Combine

Combine은 Apple의 공식 프레임워크로, RxSwift와 동작하는 방식이 비슷합니다. RxSwift는 MS사에서 파생된 것으로, 애플이 독자적인 라이브러리를 만들기 위해 내놓은 것이라 생각해도 좋습니다.

RxSwift가 UIKit을 위한거라면, Combine은 SwiftUI를 위한 툴이라고 생각하면 됩니다.

Combine은 애플에서 내놓은 라이브러리인만큼, 코드에 통합하기가 쉽다는 장점이 있습니다. RxSwift는 외부 라이브러리이기 때문에 Extension으로 기능을 구현해 사용되는 것처럼, 코코아 프레임워크와 통합하기 위해 많은 노력이 필요합니다.

let publisher = NotificationCenter.default
    .publisher(for: myNotification, object: nil) // 요런 식으로 사용하기가 굉장히 좋음

Combine의 주요 개념

RxSwift와 상당히 비슷합니다. Publisher, Operator, Subscriber 세 가지입니다.

Publishers

Publisher는 어떠한 요소(element)를 시간 흐름에 따라 방출합니다.

즉, 값 또는 요소를 보내는(emit) 역할입니다. RxSwift의 Observable과 비슷한 개념입니다.

.publisher 을 이용해 생성할 수 있습니다.

let myNotification = Notification.Name("MyNotification")

let publisher = NotificationCenter.default
    .publisher(for: myNotification, object: nil)

동작 방식은 다음과 같습니다.

Untitled

위 그림과 같이 1초에 4를, 5초에 8을, 10초에 15를, …처럼 시간에 따라 값을 방출하는 Publisher가 있다고 해 봅시다.