Combine 프레임 워크는 비동기 이벤트를 나타낼 수 있는 선언적 API 입니다.
Combine 을 도입하게 되면 이벤트 처리 코드를 중앙 집중화하고 중첩된 클로저를 제거하여
코드 관리가 더욱 수월해 집니다.
주요 구성 요소로는 Publisher 과 Subscriber 으로 구성되어 있습니다.
여기서 Publisher 은 데이터를 발행하는 역할입니다.
Subscriber 은 데이터를 구독하여 처리하는 역할을 합니다.
아래의 예시를 들어서 설명 해 보겠습니다.
import Combine
let publisher = Just(20)
let cancellable = publisher
.map { value in
return value * 3
}
.sink { value in
print("값: \(value)")
}
import Combine
Combine 을 사용하기 위해서는 import를 필수적으로 해 주어야 합니다.
let publisher = Just(20)
publisher 을 생성합니다.
해당 코드에서 Just 라는 함수는 Combine에서 제공되는 Publisher 입니다.
주로 단일 값을 발행하고 즉시 완료 신호를 보내는 역할을 하고 있습니다.
let cancellable = publisher
.map { value in
return value * 3
}
map은 Publisher 에서 발행된 값을 변환하는데 사용하는 연산자 입니다.
cancellable은 combine 에서 사용되는 프로토콜 입니다.
Publisher 과 Subscriber 의 연결을 관리하는 역할을 가지고 있습니다.
.sink { value in
print("값: \(value)")
}
.sink 는 Publisher 의 결과를 구독하고, 발행된 값을 처리하는 클로저를 제공하는 연산자 입니다.
이렇게 되면 결과값은 "값:60" 이 나오게 됩니다
Combine의 장점
Combine은 비동기 이벤트 처리,에러처리,데이터 흐름 관리 등등 다양한 기능을 제공하는 프레임워크 입니다.
let cancellable = publisher
.map { $0 * 2 }
.filter { $0 > 10 }
.sink { value in
print("결과: \(value)")
}
위의 예시처럼 연산자를 체인 형태로 사용하여 데이터의 흐름을 쉽게 이해 할 수 있습니다.
또한 비동기 이벤트를 효율적으로 처리할 수 있게 만들어져 다양한 비동기 작업을 쉽게 관리합니다.
(예시: 사용자 입력, 타이머)
Publisher의 연산자
가장 일반적으로 사용되는 주요 연산자들을 적고 해당 연산자들의 기능을 설명하겠습니다.
| 변환 연산자 | |
| map | Publisher에서 발행하는 값 변환 |
| flatMap | Publisher 에서 발생하는 값을 다른 Publisher 로 변환하고 , 그 결과를 평면화 함 |
| tryMap | 오류를 발생시킬 수 있는 변환을 수행함 |
| setFailureType | Publisher의 실패 타입을 변경함 |
| scan | 누적 값을 계산함 |
| 필터링 연산자 | |
| filter | 조건에 맞는 값만 통과시킴 |
| removeDuplicates | 중복된 값을 제가함 |
| first | 첫 번째 값을 발행합니다. |
| last | 마지막 값을 발행합니다. |
| dropFirst | 첫 번째 N개의 값을 무시합니다. |
| dropWhile | 조건이 참인 동안 값을 무시합니다. |
| 결합 연산자 | |
| merge | 여러 Publisher의 값을 결합함 |
| combineLatest | 여러 Publisher의 최신 값을 결합함 |
| zip | 여러 Publisher의 값을 쌍으로 결합함 |
| append | Publisher의 끝에 다른 Publisher 의 값을 추가 |
| prepend | Publisher의 시작에 다른 Publisher 의 값을 추가 |
| 시간 연산자 | |
| debounce | 지정된 시간동안 값이 발생하지 않으면 마지막 값을 발행함 |
| throttle | 지정된 시간동안 첫 번째 값을 발행하고, 이후에는 지정된 시간 간격으로 발행 |
| delay | 값을 지정된 시간만큼 지연시킴 |
| timeout | 지정된 시간 내에 값이 발행되지 않으면 오류를 발생시킴 |
| 에러 처리 연산자 | |
| catch | 오류가 발생했을때 대체 Publisher를 제공함 |
| retry | 오류가 발생했을떄 지정된 횟수만큼 재시도함 |
'swift 복습' 카테고리의 다른 글
| CoreData와 객체그래프 - 1 (5) | 2024.11.10 |
|---|---|
| Unit test (0) | 2024.10.11 |
| MVVM 디자인 패턴 (0) | 2024.09.22 |
| TabView (0) | 2024.08.04 |
| ScrollView (0) | 2024.08.04 |