Combine 살펴보기

글쓴이 연유 날짜

2019년, 애플이 WWDC에서 컴바인을 소개하면서 컴바인을 다음과 같이 정의했다.

that’s what Combine is, a unified declarative API for processing values over time. Combine is written in and for Swift.

컴바인은 시간에 따른 값을 처리하기 위한 통일된 선언적 API입니다. 컴바인은 스위프트로 작성이 되었고, 스위프트를 위한 것입니다.

또한, 공식 홈페이지에서는 Combine을 다음과 같이 정의하고 있다. 위의 문장과 아래의 문장이 애플이 생각하는 Combine의 기본적 컨셉이라고 볼 수도 있을 것 같다.

Customize handling of asynchronous events by combining event-processing operators.

이벤트 처리 오퍼레이터를 통해 비동기 이벤트를 원하는대로 처리하세요.

애플이 직접적으로 컴바인을 (Functional) Reactive Programming이라고도, ReactiveX의 구현체라고도 하지 않았지만 일단 대충 비슷한 것이구나하는 인지를 하고 있다.1값의 변화가 다른 값에 매핑되는 점. 그리고 오퍼레이터들의 특성을 볼 때, 엄연히 그러한 패러다임을 따라가고 있는 것은 사실이다. 하지만, 여전히 RX와 Combine은 함수형 언어를 위한 것도 아니며, 다양한 사이드 이펙트를 만드는 코드를 허용하며, 그러한 사이드 이펙트로 인해 항상 Reactive Programming인 것도 아니라서 따로 그러한 개념을 언급하지도 않고, 심지어 RX에서는 부정하고 있는 것 같다.2단, 리액터 패턴(https://en.wikipedia.org/wiki/Reactor_pattern )은 따른다고 볼 수 있을 것 같다. RX 공식 홈페이지 Observable에서도 언급된 사항.

나는 Combine 위주로만 쓰고 있었는데, 최근에 업무를 하면서 RX 위주로 작성된 파트를 봤다. 역시 같으면서 미묘하게 무언가 다르다는 생각을 했는다.(물론, 개념적으로 비슷하기에 문서를 보면 바로바로 코딩이 가능하겠지만.) 본 글에서는 Combine의 기본 요소를(Introduce Combine에 의하면, Publisher, Operator, Subscriber.) 하나씩 다시 보면서 대체적으로 비슷하지만, 중간중간 RX와 어떤 다른 특성을 지니고 있는지 알아보려고 한다.

요모조모

대부분 RX 공식 홈페이지애플 Combine 문서에 기반하는 내용들을 정리한 것입니다.

빠르게 비슷한 개념을 찾고 싶으신 경우 rxswift-to-combine-cheatsheet를 보시면 수월합니다.

RXSwift의 경우에는 대부분이 Class 구현체이다. 그러나 Combine의 경우에는 대부분이 Protocol로 정의되어 있기 때문에 필요하다면 직접 구현을 만들어서 쓸 수도 있다.

목차

  1. Publisher
  2. Subscriber
  3. Operator
  4. Scheduler
카테고리: 미분류