Asynchronous 프로그래밍
- Combine은 Asynchronous 프로그래밍을 더 쉽고 안전하게 할 수 있게 해준다.
- 애플은 Asynchronous 프로그래밍을 이미 다음과 같은 것들에서 사용 중이다.
- NotificationCenter
- Delegate pattern
- Grand Central Dispatch
- Closures
- Asynchronous 프로그래밍은 다음과 같은 멀티 쓰레드 작업시 필요할 수 있다.
var name = "Hohyeon"
print(name)
name = "Moon"
name += " Moon"
print(name)
- 이 코드의 name 값이 상황에 따라 Hohyeon Moon이 될 수도 있고
- Moon Moon 될 수도 있기에 우리는 Asynchronous 프로그래밍이 필요하다.
Combine
- 애플은 이미 Timer, NotificationCenter, Core Data 등에 Combine API를 적용했고
- 새로운 SwiftUI 프레임워크에는 Combine을 더 쉽게 적용할 수 있도록 디자인 해놨다.
- Combine의 계층은 아래 그림과 같다.

- Combine의 핵심 요소 3가지는 publishers, operators, subscribers이다.
Publishers
- Publishers는 다음과 같은 3가지 타입을 emit 할 수 있다.
- Publisher의 generic Output 타입.
- 성공적인 completion.
- Publisher의 generic Failure 타입.
- 그리고 Publisher는 다음 두 가지 타입에 대해 generic 하다.
- Publisher.Output
- Publisher.Failure
Operators
- Operators는 Publisher protocol에서 선언된 메소드이다.
- 똑같거나 새로운 publisher를 return 해준다.
- 여러 개의 operators를 호출할 수 있고, 서로 묶어줄 수 있다.
- 여러 operator이 퍼즐 같이 서로 맞춰지는 것이 최대 장점이다.
- 하나의 output이 다음 것의 input 타입과 맞아 떨어져야 하기 때문이다.
Subsribers
- Publisher와 Operator를 통해 온 것들은 subscriber로 마무리된다.
- Subsribers는 보통 output 값이나 completion 이벤트로 무언가를 한다.
- 현재 Combine는 두 가지 built-in subcriber를 제공한다.
- 하나는 sink이고, 하나는 assign이다.
Combine의 장점
- 기존 코드에 비해 Combine 코드가 좋은 이유가 무엇일까.
- 우선, Combine은 System Level에서 구현되어 있다.
- 즉, 애플이 아닌 다른 user는 사용하지 못하는 부분도 사용한다.
- IBAction이나 delegate 같은 옛 방식을 사용하는 것보다 자동 구현이 많다.
- 결국, Combine은 필수가 아니지만 우수한 코드를 짜는데 도움을 준다.
관련 글