이번 글에서는 Combine에 대해 최대한 간단히 애플 문서의 내용을 살펴보고, 이후의 글들을 통해 차근 차근 필요한 내용들을 공부하고 정리해 가보도록 하겠습니다.
개념
1. Combine의 정의

Combine은 Apple의 First party Framework로 애플 문서에는 위와 같이 정의가 되어있습니다.
네. event-processing operators를 결합해서 asynchronous events을 customize하게 handling한다는 뜻입니다.
event를 처리하는 연산자라는게 확 와닿지 않기도하고 정리해보고 가면 좋을 것 같아서 정리해보고 가도록 하겠습니다.
구글에 Combine Operator를 검색하니 나오는 것은 Publisher Operators 문서만있었지만 문서에 들어가서 operator로 필터링을 해보면 크게 봤을 때 Publisher에도, Subscriber에도 Subscription에도 Operator가 있는 것을 확인할 수 있었습니다.
2. Operator의 정의

Publisher Operator는 받은 요소들에 act를 할 downstream publishers 또는 subscribers를 생성하는 Method라고 하네요. 어찌됐건 'publisher나 subscriber를 생성하는 method'인 것이네요.
* Publisher, Subscriber, Subscription은 Combine을 사용하고자 한다면 반드시 알아야하는 내용들로, 관련 내용들은 이 후에 작성되는 글들을 통해 차근 차근 공부하며 정리해 나가보도록 하겠습니다.
* Downstream, Upstream에 대한 글도 공부 후 따로 다뤄보도록 하겠습니다.
문서의 Overview영역의 코드를 살펴보면 아래와 같은데
let cancellable = [1, 2, 3, 4, 5].publisher
.filter {
$0 % 2 == 0
}
.sink {
print ("Even number: \($0)")
}
// Prints:
// Even number: 2
// Even number: 4
구체적인 내용은 몰라도 array에 publisher에 접근할 수 있고, 그 publisher라는 것에서 swift의 고차 함수로 익숙한 filter메서드 같은 것으로 filtering을 하고 sink라는 것을 통해서 값을 출력하는구나'라고 흐름을 확인할 수 있고, 뭔가 불명확한 부분은 Overview의 내용 중 아래의 내용을 살펴보면 조금은 이해가 되는 것 같습니다.
'The sink subscriber automatically subscribes to the filter publisher, at which point the filter publisher subscribes to its upstream publisher, the sequence publisher.'
'sink subscriber는 filter publisher를 자동으로 subscribes하고, 이 시점에 filter publisher는 upstream publisher인 sequence publisher를 subscribes한다.
관련 코드를 Xcode에 입력하고 우리가 알고 있는 array의 타입 이후로 리턴 타입을 확인해보면 각 각 다음과 같습니다.



'sink subscriber는 filter publisher를 자동으로 subscribes하고, 이 시점에 filter publisher는 upstream publisher인 sequence publisher를 subscribes한다'라는 내용을 리턴 타입과 매칭해서 유추해보면 다음과 같습니다.
-> 'sink라는 operator를 사용하면 filter를 통해 리턴되는 publisher라는 것을 subscribe(값을 받을 수 있다)할 수 있다. 그리고 filter operator는 array를 통해 접근가능한 publisher를 subscribe(값을 받을 수 있다)할 수 있다.
1. publisher를 subscriber와 operator가 subscribe하고 값을 받을 수 있다.
2. operator에서 리턴되는 publisher를 다른 operator가 subscribe하고 값을 받을 수 있다.
3. sink라는 operator는 subscribe해서 받은 값을 사용하고, 다른 operator와 다르게 AnyCancellable이라는 것을 리턴한다.(일반 operator와 다른 용도로 사용될 것이다. 리턴 값이 다르니까.)
-> 1~3을 정리해보면 'publisher를 subscribe하고 값을 사용하고, sink를 통해 리턴되는 AnyCancellable이라는 값을 통해 뭔가가 이뤄질 수 있다.'
AnyCancellable관련 내용도 공부 후 따로 다뤄보도록 하겠습니다.
Combine의 정의와 그 정의에 있는 Operator라는 것에 대해 간단히 살펴봤습니다.
처음에 Combine의 정의에서 나온 'event-processing operators를 결합해서 asynchronous events을 customize하게 handling한다'라는 의미가 Operator문서와 함께 살펴봤을 때 저는 publisher를 subscribe하고 값을 받아 사용하고, 그 리턴되는 publisher를 subscribe하고 ... 를 의미한다고 생각합니다. (잘못 이해한 것이라면 댓글 남겨주세요.🙂)
Combine이란 무엇인가에 대해서만 간단히 정의 정도만 정리하고 넘어가려고 했지만, 관련해서 알고가면 좋을 것 같은 내용이 있어서 같이 간단하게 알아봤습니다. 다음 글 부터 차근 차근 또 공부하고 정리해 나가보도록 하겠습니다. 🙂
참고
애플 공식 문서