-
안녕하세요. 그린입니다🟢
이번 포스팅에서는 Combine에 대해 학습해보겠습니다🧑🏻💻
Combine을 알기전!
MVVM 패턴을 따르기 위해 스토리보드 작업 대신 SwiftUI를 사용하면서 RxSwift로 구현을 해주었는데요.
WWDC 2019 이후 Combine이 나타났습니다.
Combine이 무엇이냐?
쉽게 생각하면 RxSwift는 써드파티 프레임워크이고 Combine은 애플에서 RxSwift의 역할을 위해 만든 퍼스트파티 프레임워크입니다.
Combine을 왜 쓰냐?
RxSwift를 쓰는 이유와 상충한다고 보는데요.
비동기 이벤트 처리를 하기 위함입니다.
기존에 비동기 이벤트 처리를 위해 delegate, GCD, notification center, 콜백 클로저 등을 사용했습니다.
이러한 방식의 문제는 각자 고유의 인터페이스를 가지기도 하고 수정이 어려웠습니다.
이런 모든 방식들을 통합한게 Combine입니다.
RxSwift가 있는데 왜 Combine이 나왔지?
우선 위에서도 언급했듯이 RxSwift는 써드파티입니다. RxSwift를 사용해보면 RxCocoa와 더 잘맞습니다.
그렇지만 이제는 SwiftUI가 화두가 되는 시점에서 SwiftUI에 더 맞는 데이터 바인딩을 Combine이 제공합니다.
뭐, 당연하겠지만 빌트인 프레임워크가 성능이 더 좋겠는건 말안해도 👍🏻
이정도의 스펙의 차이가 있다고 하네요!!
개인적으로 지금은 iOS 13 이전 버전을 컴바인이 지원하지 않아 RxSwift도 쓰이지만 머지 않아 Combine으로 넘어오지 않을까요..?
또한 이정도의 시간과 메모리 할당 측면에서 Combine이 압도적으로 우세합니다.
Combine에서 꼭 알아야할 3가지
1. Publisher
- 시간 흐름에 따라 값을 Subscriber에 전달해주는 프로토콜로 값을 받고 처리하고 전달하는 기능을 해준다.
2. Operator
- Publisher가 전달한 값에 대한 연산 수행하는 메서드(퍼블리셔에 정의된 메서드)로 여러 Operator를 결합할 수 있다.
- 매번 input / output을 가지며 이를 upstream / downstream이라 부른다.
- map / tryMap / flatMap / mapError / replaceNil / scan 등등 다양한 오퍼레이터 메서드들이 있다.
3. Subscriber
- Publisher로 부터 전달된 값 혹은 이벤트를 구독하고 실제적으로 전달되면 인지해서 액션을 취하는것
- sink와 assign으로 사용된다.
- sink는 커스텀하게 결과와 컴플리션을 받아 클로저를 구현할 수 있다.
- assign은 output을 모델 혹은 UI control로 바로 바인딩한다.
[느낀점]
사실 저도 RxSwift에 대해서는 대략 알고있었는데 Combine이 무엇인지 들어는 봤는데 RxSwift와 같은 기능 같은데 무슨 차이지?
하는 생각이 있었습니다. 이번 Combine에 대해 학습을 하기 전까지는 말이죠..!?
이제는 차이를 인지했으니 실습을 통해 프로젝트에 녹여 봐야겠습니다.
비동기 이벤트 처리를 위해 GCD? 딜리게이트? 아니면 노티피케이션 센터? 뭘쓰지!!? 라고 항상 고민했었는데, 이제는 Combine을
적극 활용해보면서 익혀가야겠습니다👋🏻
이번에는 컴바인에 대해 간략히 소개하고 어떤것인지 햝아봤습니다.
다음번에는 오퍼레이터들의 메서드들도 파보고 좀 더 깊이 차근차근 들어가보겠습니다🚶🏻
[참고자료]
https://developer.apple.com/documentation/Combine
https://developer.apple.com/videos/play/wwdc2019/721/
https://medium.com/flawless-app-stories/will-combine-kill-rxswift-64780a150d89
'Combine' 카테고리의 다른 글
Combine - Cancellable (2) 2022.03.10 Combine - Scheduler (0) 2022.03.07 Combine - Subject (0) 2022.02.28 Combine - Subscriber (0) 2022.02.24 Combine - Publisher (0) 2022.02.22