swift 복습

Combine의 개념

섭섭's 2024. 10. 6. 01:35

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