일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 학과별커뮤니티
- collectionview
- GCD
- 실습
- mvc
- struct
- SwiftUI
- 기초문법
- 대표
- 프로토콜
- 이론
- 네트워크
- 구름톤 유니브
- 옵셔널
- RxSwift
- ios
- uikit
- 반응형
- 동시성
- Kingfisher
- swift
- async
- 토이프로젝트
- WeatherKit
- 스트럭트
- Optional
- 세종대학교
- 앱개발
- CS
- MVVM
- Today
- Total
스윞한 개발자
Combine 알아보기 본문
# 1. Combine 이란?
반응형(Reactive) 프로그래밍의 개념을 기반으로 개발된 프레임워크입니다.
반응형 프로그래밍은 데이터 스트림과 변화의 전파에 관련된 선언형 프로그래밍 패러다임입니다.
1. 데이터 스트림(반응형 프로그래밍)
- 시간에 따라 만들어진 일련의 이벤트
ex ) 탭 이벤트 스트림
2. 선언형 프로그래밍
- "무엇(What)"에 집중
- 결과에 집중하도록 구체적인 행위에 집중
- 행위를 정의하고 그 행위에 데이터를 전달
- 가독성과 유지보수 향상
* 반응형 프로그래밍 기반 패턴 Observer Pattern
관찰자 : 주체의 상태의 변화를 감지하기 위해 주체를 구독
주체(대상) : 관찰자에게 상태가 변할때마다 알림
# Combine 정의 살펴보기
From WWDC,
A unified, declarative API for processing values over time.
시간 경과에 따른 값을 처리하기 위한 통합된 선언적 API
* iOS의 비동기 인터페이스
- Target/Action
- Notification center
- URLSession
- Key-value Observing
...
Customize handling of asyncronous events by combining event-processing operators.
이벤트 처리 연산자들을 조합하여 비동기 작업 처리를 사용자화
# 2. Publisher, Subscriber 알아보기
* Publisher(공급자)
1. 데이터 스트림 생성
2. 데이터 전달
3. 데이터 변환 및 조합
* Publisher Protocol
- Output : 생성되는 값의 종류
- Failure : 생성되는 에러 종류
* 핵심 기능 : subscribe(_:)
* Subscriber(관찰자)
1. 데이터 처리
2. 이벤트 처리
3. 구독 제어
* Subscirber Protocol
- Input, Failure
- 구독 메커니즘을 처리하는 3가지 함수 존재
# Pub-Sub Pattern (반응형 프로그래밍 기반 패턴)
Observer 패턴과의 차이점은 Event Channel 이 추가되었습니다. 관리자와 구독자를 직접적으로 연관하는게 아닌 중간 관리자인 이벤트 채널을 두고 연관됩니다. 그러므로, 공급자와 구독자는 느슨하게 연결되는 장점이 있습니다.
# 이벤트 관리자(Subscription : 구독권) Event Channel
- 이벤트 및 데이터 전달
- 구독 관리
- 자원 해제 및 정리
* Convenience Publishers
1. Just
각 구독자에게 한 번 값을 방출한 후 완료되는 Publisher. 실패가 없으므로, Failure = Never
2. Empty
값을 생성하지 않고 완료만 하는 Publisher
3. Fail
특정 에러로 즉시 종료되는 Publisher
4. Future
최종적으로 하나의 값을 생성한 후 완료되거나 실패하는 Publisher
* Convenience Subscribers
1. Sink
구독 시 무제한 개수의 값을 요청하는 Subscriber
- receiveCompletion: 완료되었을 때 실행
- receiveValue: 값을 받았을 때 실행
2. Assign
지정된 key path로 값을 프로퍼티에 할당하는 Subscriber
# 3. Operator 알아보기
1. 변환 연산자 : Map, TryMap, FlatMap
2. 필터 연산자 : Filter, CompactMap
3. 조합 연산자 : Zip
# 변환 연산자
1. Map
transform 클로저를 사용하여 Upstream Publisher에서 나오는 모든 값들을 변환하는 퍼블리셔
2. TryMap
Map과 유사하지만 transform 클로저에서 에러를 throw할 수 있는 Publisher
3. FlatMap
Upstream Publisher에서 오는 값들을 새로운 퍼블리셔로 변환하는 퍼블리셔
# 필터 연산자
1. Filter
클로저의 조건과 일치하는 값을 발행하는 퍼블리셔
2. CompactMap
클로저에서 nil이 아닌 값을 발행하는 퍼블리셔
# 조합 연산자
1. Zip
두 개 이상의 Upstream Publisher로부터 나온 값을 받아와 조합하고 그 값을 방출해주는 퍼블리셔
# 4. Error handling, Schedule
Error Handling
모든 Publisher, Subscriber에 Failure 타입이 명시되어 있습니다. 에러가 발생하기 전에 미리 대응하고 복구가 가능하며, ReplaceError, Catch, SetFailureType, MapError등으로 처리 가능합니다.
1. ReplaceError
스트림 내에서 에러가 발생했을 때, 대체 값을 제공하는 퍼블리셔
2. Catch
Upstream 퍼블리셔에 발생한 에러를 다른 퍼블리셔로 대체하여 처리하는 퍼블리셔
* SetFailureType
퍼블리셔의 Failure 타입을 변형하는데 사용되는 퍼블리셔
* MapError
Upstream Publisher에서 발생한 에러를 새로운 에러로 변환하는 퍼블리셔
# Schedule
- 데이터 스트림 지연 및 특정 스레드 또는 큐에서 작업을 수행
- 언제, 어디서 처리할지 정의 가능
- ReceiveOn, SubscribeOn
- Delay, Debounce
1. ReceiveOn
하위에 위치한 연산자나 구독자에게 전달되는 이벤트를 지정된 스케줄러에서 처리하도록 하는 퍼블리셔
2. SubscribeOn
데이터 스트림이 생성되는 스케줄러를 지정하는 퍼블리셔
# 5. Subject, Cancellation
1. Subject
Publisher와 Subscriber 두 역할 모두 가능, send 메서드를 통해서 Data Stream에 값 주입 가능
Subject의 종류 : PassthorughSubject, CurrentValueSubject
* PassthorughSubject : 방출되는 값과 이벤트만 전달시키는 역할만 수행
* CurrentValueSubject : 마지막 전달된 값을 저장 가능
2. Cancellation
* Cancellable
- 어떠한 작업에 취소가 가능함을 나타내는 프로토콜
- cancel 함수 제공
- Subscription은 Cancellable 프로토콜 채택
* AnyCancellable
- 구독 시 해당 객체 반환
- 구독을 쉽게 취소 가능
# Type Erase
원래의 퍼블리셔의 타입을 지우고 AnyPublisher로 변환
실제 퍼블리셔의 타입 정보가 감춰져 다양한 유형의 퍼블리셔를 처리하거나 반환 가능
일반화의 유연성이 높아짐!
지금까지 Combine에 대해 톺아보는 시간을 가졌습니다. 긴 글 읽어주셔서 감사합니다.
![](https://t1.daumcdn.net/keditor/emoticon/friends1/large/001.gif)
'Swift 이론' 카테고리의 다른 글
앱 Thinning (0) | 2024.12.30 |
---|---|
Mac Catalyst 살펴보기 (2) | 2024.12.29 |
iOS - LLDB (2) | 2024.04.18 |
iOS - 앱 생명주기(Lifecycle) (0) | 2024.04.17 |
Swift - ModernCollectionView (0) | 2024.04.14 |