iOS/Combine

[Combine] Combine이란? - Combine 공부 1

Dev_Pingu 2021. 12. 27. 00:26
반응형

안녕하세요 Pingu입니다.🐧

요즘 나름 열심히 공부하는 프레임워크인 Combine를 복습 겸 확실히 공부할 겸 써보려고 하는 Combine입니다.😄
공부할 것 중 우선순위를 둔 것이 Combine, SwiftUI인데, SwiftUI를 공부하려고 보니 Combine을 알아야 하더라고요?
그래서 Combine부터 공부하고 있습니다.

제가 공부하면서 많이 어려웠고 아직도 어렵지만... 누구든지 이해할 수 있는 Combine 정보글이 되도록 열심히... 써보겠습니다.

Combine이란?

그럼 Combine은 뭘까요?
Combine은 2019년에 Apple에서 만든 새로운 프레임워크입니다. (RxSwift의 애플 버전이라고 생각하셔도 됩니다😄)

https://developer.apple.com/documentation/combine

 

Apple Developer Documentation

developer.apple.com

애플의 공식문서에 Combine의 정의를 번역해보면

이벤트 처리 Operator를 Combine 하여 비동기식 이벤트 처리를 Customize 합니다.

라고 되어있네요.

좀 더 말을 풀어보면

Combine 프레임워크는 시간 경과에 따라 변경되는 값을 내보내는 Publisher와 이를 수신하는 Subscriber로 시간 경과에 따른 값 처리를 위한 선언적 Swift API

입니다.

간단하게 말해서 Publisher, Subscriber와 같은 녀석들을 사용해서 비동기 이벤트를 처리하기 위한 프레임워크다. 정도로 이해하면 될 것 같아요.

사실 비슷한 목적을 위해 이미 존재하던 RxSwift라는 게 있죠. 근데 얘는 애플에서 만든 게 아닌데 Combine은 무려 애플에서 만들었습니다. 이제 RxSwift 쓰지 말고 Combine이나 써라는 말로 들리네요.😄 Apple에서 만들어서 그런지 기본 API에서도 아주 쉽게 사용할 수 있습니다.

Combine 꼭 써야 하나요?

이미 우리는 Combine이 없어도 Delegate 패턴, 콜백 함수, completion 클로저 등을 활용해서 비동기 프로그래밍을 잘 구현하고 있었습니다. 저는 이런 걸 비동기로 구현할 때 아주 깊은 콜백 함수나 delegate가 여러 개가 되는 경우 코드도 지저분해지고 예외 처리도 까다로웠는데, Combine을 사용하면 깔끔하게 처리할 수 있다고 합니다! 또한 이번에 Swift 5.5에서 새로 나온 async, await까지 함께 사용하면 엄청 깔끔하게 비동기 프로그램을 만들 수 있을 듯합니다.

Combine의 유일한 단점은 iOS 13부터 사용할 수 있다는 점.. 그래서 만약 최소 버전이 낮은 앱을 개발해야 한다면 어쩔 수 없이 RxSwift와 같은 다른 선택지를 선택해야 했습니다. 하지만 언젠가 최소 버전은 오르기 마련이니 애플에서 만든 Combine은 필수적인 지식이 될 듯합니다. 특히 SwiftUI를 공부하기 위해서도 필수적으로 공부해야 해서 애플 플랫폼 개발자라면 반드시 공부해야 한다고 생각합니다.

Combine의 구성 요소

어쨌든 Combine이 좋다는 것도 알았고 공부해야 하는 것도 알았으니 Combine이 무엇으로 비동기 이벤트를 처리하는지 알아봐야겠죠?

제가 공부하면서 느낀 Combine의 핵심은

  • Publisher
  • Subscriber
  • Operator
  • Subscription

입니다. 사실 이거말고도 많은 개념들이 있지만 일단 저 4개가 가장 중요해 보였습니다.

Combine의 여러 부분이 Protocol로 정의되어있어서 Protocol에 대한 개념도 다시 공부해보면 도움이 될 것 같았어요. 특히 저 4개는 모두 Protocol입니다.

각각의 프로토콜에 대한 세부적인 부분은 이후 글에서 자세히 알아보도록 하고 이번 글에서는 간단하게 저게 뭔지 정도만 짚고 넘어가려고 합니다.

  • Publisher
    • Publisher는 하나 혹은 여러 개의 Subscriber 객체에 시간이 흐름에 따라 값을 내보낼 수 있는 타입을 선언하기 위한 프로토콜입니다.
    • Output, Failure 타입이 제네릭으로 구현되어 있습니다.
    • 간단하게 이를 사용하라고 애플에서는 자주 사용할 것 같은 기능으로 Future, Just, Deferred, Empty, Fail, Record와 같은 Publisher프로토콜을 준수하는 Struct, Class들을 구현해뒀습니다.
  • Subscriber
    • Subscriber는 Publisher에게 값을 받을 수 있는 타입을 선언하기 위한 프로토콜입니다.
    • Input, Failure 타입이 제네릭으로 구현되어 있습니다.
  • Operator
    • Operator는 Publisher를 반환하는 Publisher 프로토콜에 정의된 메서드들입니다.
    • 여러 종류의 Operator를 Combine 하여 사용하여 Publisher가 내보내는 값을 처리합니다.
    • Upstream, DownStream이라고 하는 Input, Output을 가지고 있습니다.
  • Subscription
    • Subscription은 Publisher와 Subscriber의 연결을 나타내는 프로토콜입니다.
    • 간단하게 말해서 Publisher + Operator + Subscriber로 이뤄진 하나의 작업이 Subscription입니다.

결론

결론은 Combine은 Apple에서 만든 짱 좋은 비동기 처리 프레임워크!라는 것입니다.
좀 더 격렬한 소개를 보고 싶으시다면 [WWDC 2019] Introducing Combine을 보시면 좋습니다.

다음 글에서 계속해서 Combine에 대해 열심히 알아보도록 하겠습니다.

감사합니다.

반응형