[Combine] Combine 시작하기
들어가기 전에
애플에서 또 새로운 것이 나왔습니다! 사실 나온지는 좀 됐지만 제가 공부를 안했으니 새로운 것..! ㅎㅎ
WWDC 2019 이후에 SwiftUI와 Combine이 핫한 키워드였죠. 하지만 공부를 안한 저에게는 대략 이런 느낌이었습니다.
SwiftUI — 앞으로 Storyboard
대신 사용할거..
Combine —애플에서 만든 RxSwift
랑 비슷한거..
이러니 공부를 안할수가 없다..! 미루고 미뤄왔던 🔥 토픽들 시작해봅시다..(어기적)
그리고 눈치챈 분들도 있으시겠지만 이번 주제는 이전과는 다르게 대화 나누듯이 존댓말로 문체를 바꿔서 써보려고 합니다. 왜냐면 제가 다른글들을 읽을때 이런 문체가 잘 읽혔기 때문! 그럼 진짜 시작!
Combine이 모다?
역시 시작은 공식문서죠 ~.~
Customize handling of asynchronous events by combining event-processing operators.
핵심은 🎉비동기 이벤트를 잘 처리하기 위해 탄생🎉 인듯 합니다.
그런데 지금까지 비동기 프로그래밍 방식 없던게 아니잖아요?? delegate
, closure callback
, GCD
, notification center
등 이렇게 많은데! 컴바인은 왜 또 나온거란 말이야………….!!!!!!!!!?🤔
Combine 왜 써?
뭐 찾아보면 Combine
사용할 때 장점들이 여러개 나오지만 저한테 가장 와닿았던 내용은 이렇습니다.
비동기 처리를 publisher라는 동일한 인터페이스를 통해 한다면 구성과 재사용이 강력해진다.
아니 잘 안 와닿는다구요???? 사실 저도요 🙋🏻♀️ㅎ 잘은 아니고 그~~~나마 이해가 될랑 말랑?
저걸 풀어서 설명하자면 대략 이런 내용 같아요.
비동기 프로그래밍을 할때는 재현이나 추적 및 수정이 어렵다는 문제를 갖고 있습니다. 이런 문제의 원인은 각각이 고유한 인터페이스를 가지는 비동기 API를 사용하기 때문입니다. 아래처럼 이것도 저것도 모두 쓰고 있는거예요.
그렇다면 이렇게 비동기로 동작하는 모든 유형을 통합해서 사용할 수 있다면 훨씬 편하겠죠? 놀랍게도 Combine
이 이걸 해냅니다.
사실 비동기 이벤트의 핵심은 뒷단에서 돌고 있는 함수의 완료 순간을 인지하는거잖아요? 즉 작업의 완료 순간을 캐치하는 것!! 그러면 작업 완료 순간을 캐치할 수 있는 어떤 수단이 있다면 그것만 사용해도 될거예요.
그 수단이 바로 Combine
에서 제공하는 publisher
입니다. 해당 인터페이스를 사용하면 작업의 완료 순간을 캐치하고 비동기 처리를 할 수 있습니다.
💡일단 저는 이렇게 이해했는데 만약 틀린 부분이 있다면 의견 남겨주세요!
사실 이건 RxSwift
를 사용했을때 장점과 비슷한거 같아요. 다만 Combine
은 SwiftUI
와 더 잘맞는다는거죠. Combine
은 SwiftUI
에 적합한 데이터 바인딩 방법을 제공합니다.
RxSwift
를 아는 분들은 RxCocoa
— RxSwift
의 관계를 SwiftUI
— Combine
으로 생각하면 된다고 하네용.
물론 비동기 처리를 위해서 SwiftUI
없이 Combine
만 사용해도 됩니다! 아무래도 서드파티 프레임워크인 RxSwift
보다야 built-in 프레임워크의 성능이 좋을테니까요. (성능 비교에 대한 자세한 내용은 링크를 확인하세요)
Combine에서 중요한 개념들
크게 Publisher
, Operator
, Subscriber
세가지가 중요한 개념이라고 하는데 앞으로 계속 다룰 거니까 간단하게만 짚고 넘어가봅시다!
Publisher
publish는 출판하다.. 발행하다.. 어쨌든 뭔가 만들어내는 거잖아요? 네.. 일단 값을 방출하는 것! 정도로만 알아둡시다.
Operator
직역하면 연산자죠. Combine
에서는publisher
가 내보낸 값에 대해서 연산을 수행하는 메소드를 operator
라고 합니다. map(_:)
과 같은 것들이 있는데 감이 오시는 분들도 있겠죠?
Subscriber
Subscriber
는 일반적으로 방출된 값 또는 완료 이벤트를 통해 “무언가”를 하는 겁니다. 이 정보들을 스크린에 반영하거나 웹서버로 보낸다거나 말이죠!
마무리
위의 세가지 개념은 어차피 뒤에 계속해서 나올 내용이기 때문에 당장에 이해하지 못하셔도 괜찮아요. 저도 완벽히 이해한건 아니니까요!
이 글에서는
Combine은 ✨비동기 이벤트✨를 잘 처리하기 위해
정도만 가져가시면 될 것 같아요!
그럼 이후의 자세한 내용들은 미래의 저한테 맡겨 놓고 그럼 20000!👋🏻