티스토리 뷰
안녕하세요 Diana 입니다.
오늘은 정말 핫한 Combine에 대해 알아보려고 합니다.
제가 처음 업무를 시작했던 2020년도에는 RxSwift가 대세였던거로 기억하는데요.
Combine이 공개된지 벌써 5년이 되어가니 이제 Combine의 수요가 많이 늘어났더라구요.
그리고 요새 프로젝트를 하며 Combine으로 된 예제들을 자주 접하는데 굉장히 재밌어 보였구요.
그래서 저도 공부해보려고 합니다!
✅ Combine 이란?
그럼 Combine은 대체 무엇일까요?
Combine은 2019년도 Apple에서 발표한 선언형 프레임워크로 공식문서에서의 설명은 아래와 같습니다.
Custom handling of asynchronous events by combining event-processing operators.
Apple Docs - https://developer.apple.com/documentation/combine
이벤트 처리 Operator 들을 조합하여 동시성 이벤트 들을 처리하는 방법을 커스텀합니다.
역시나 동시성 이벤트 처리를 강조하네요.
이렇게 오늘도 @escaping 클로저를 사용한 복잡한 코드가 한걸음 더 멀어지는게 느껴집니다.
그럼 Combine을 사용하기 위해 알아야 하는 핵심 개념에는 무엇이 있을까요?
공식문서에 따르면 Combine을 사용하기 위해서는 Publisher, Subscriber 에 대해 알아야한다고 합니다.
✅ Publisher
protocol Publisher<Output, Failure>
Publisher은 이후 설명할 Subscriber와 같이 프로토콜 이며 위와 같은 형태를 띄고 있습니다.
Declares that a type can transmit a sequence of values over time.
Apple Docs - https://developer.apple.com/documentation/combine/publisher
공식문서에 따르면 Publisher은 값의 시퀀스를 전달할 수 있는 타입을 정의한다고 하네요.
값의 시퀀스를 전달한다. 그러면 역시 전달 된 값을 받는 쪽이 필요하겠죠?
그게 바로 다음에 설명할 Subscriber입니다.
Publisher와 Subscriber은 항상 짝을 이루며 하나의 Publisher은 하나 이상의 Subscriber을 가질 수 있습니다.
그리고 짝을 이루는 만큼 Publisher의 Output과 Failure의 타입은 Subscriber의 Input과 Failuer의 타입과 매칭되어야 합니다.
이 타입 매칭을 위해서 Combine에서는 다양한 Operator들을 제공하는데 이 부분은 직접 사용을 해봐야 와닿을 것 같은데 이 부분을 고려해서 Apple에서 해당 부분을 영상으로 다뤄줍니다!
https://developer.apple.com/videos/play/wwdc2019/721
✅ Subscriber
protocol Subscriber<Input, Failure> : CustomCombineIdentifierConvertible
Subscriber 또한 프로토콜이며 위와 같은 형태를 띄고 있습니다.
A protocol that declares a type that can receive input from a publisher.
Apple Docs - https://developer.apple.com/documentation/combine/subscriber
공식문서에 따르면 Publisher 으로부터 전달받은 값을 받을 수 있는 타입을 정의하는 프로토콜 이라고 하네요.
우리는 Subscriber을 Publisher의 subscribe(_:) 메소드를 호출함으로써 Publisher와 연결할 수 있습니다.
이렇게 연결되면 Publisher은 Subscriber의 receive(subscription:) 메소드를 호출할 수 있습니다.
이름이 직관적이라 좋네요!
이 외에도 Combine에서는 Subscriber를 등록하는 방법으로 sink(receiveCompletion:receiveValue:) 또는 assign(to:on:) 등의 오퍼레이터를 제공합니다.
총 3가지네요.
1. subscribe(_:), 2. sink(receiveCompletion:receiveValue:), 3. assign(to:on)
이렇게 Publisher와 Subscriber에 대해 간단히 알아봤으면 이젠 써보는일만 남았네요.
이 부분은 다음 글에서 이어가보도록 하겠습니다!
- Total
- Today
- Yesterday
- swift
- tipview
- 빅세타표기법
- kakaomapssdk
- SwiftUI
- tuist v4
- Tuist
- BoxedType
- boxedprotocoltype
- threadprogramming
- 알고리즘
- private(set)
- 팁킷
- ios
- 개발자코테
- opaque
- 코어데이터
- Concurrency
- ViewBuilder
- capsulation
- tipkit
- swiftpackage
- reusablelist
- coredata
- 스위프트
- Algorithm
- asymptoticnotation
- opaquetype
- boxedprotocol
- swiftcoredata
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |