안녕하세요! 피피아노입니다🎵
이번 포스팅에서는 Swift의 Combine 프레임워크와 사용방법에 대해 알아보려고 합니다.
그럼 바로 시작하겠습니다!
Combine이란?
우선 애플의 개발자 문서를 보면 Combine에 대해 이렇게 나와 있습니다.
"The Combine framework provides a declarative Swift API for processing values over time. These values can represent many kinds of asynchronous events. Combine declares publishers to expose values that can change over time, and subscribers to receive those values from the publishers."
해석을 해보자면
"Combine 프레임워크는 시간 경과에 따른 값 처리를 위한 선언적 Swift API를 제공합니다. 이러한 값은 다양한 종류의 비동기 이벤트를 나타낼 수 있습니다. Combine은 publishers가 시간이 지남에 따라 변경될 수 있는 값을 노출하고 subscribers가 publishers로부터 해당 값을 받도록 선언합니다."
라고 해석을 해볼 수 있습니다. 여전히 감이 잘 안 잡히죠?
쉽게 풀어서 설명을 해보자면
Combine 프레임워크는 Swift에서 제공하는 특별한 도구입니다. 이 도구는 시간이 지남에 따라 변경되는 값을 처리하는 데 도움을 줍니다. 이 값들은 다양한 종류의 비동기 이벤트, 즉 동시에 일어나지 않고 각기 다른 시간에 발생하는 여러 사건들을 나타낼 수 있습니다.
Combine에서는 이러한 비동기 이벤트를 관리하기 위해 'Publisher'와 'Subscriber'라는 두 가지 주요 구성 요소를 사용합니다.
'Publisher'는 시간이 지나면서 변경될 수 있는 값을 '방출'합니다. 예를 들어, 네트워크 요청의 결과나 사용자 인터페이스에서의 사용자 액션과 같은 것들이 될 수 있습니다.
반면에 'Subscriber'는 'Publisher'가 방출하는 값을 '수신'합니다. 'Subscriber'는 받은 값에 대해 원하는 작업을 수행할 수 있습니다. 예를 들어, 화면에 결과를 표시하거나 다음 작업을 계획하는 등의 역할을 수행합니다.
즉, Combine은 Swift에서 비동기 이벤트 처리와 반응형 프로그래밍을 위해 제공되는 프레임워크라고 생각하시면 됩니다.
Combine의 주요 개념
자 이제 Combine이 어떤 것인지 살펴보았으니 Combine의 주요 개념에 대해서 알아보겠습니다.
Combine을 이해하기 위해서는 Publisher, Subscriber, Operator 이렇게 3가지에 대해서 알고 있어야 합니다.
Publisher: Combine에서 가장 중요한 개념 중 하나는 Publisher입니다. 이는 값을 방출하거나 완료 신호를 보내는 역할을 합니다. Publisher는 다음 두 가지 유형의 출력을 생성할 수 있습니다. 값을 방출하거나 성공적으로 완료하거나 오류로 실패합니다.
Subscriber: Subscriber는 Publisher로부터 값이나 완료 신호를 수신하는 역할을 합니다. Subscriber는 Publisher가 방출하는 값들을 처리하고, 완료나 실패 이벤트를 받으면 스트림을 정리합니다.
Operator: Operator는 Publisher가 생성하는 이벤트를 변환하거나 처리하는 데 사용됩니다. 예를 들어, map, filter, reduce 등의 연산자가 있습니다. 연산자를 사용하면 복잡한 비동기 작업을 쉽게 구성할 수 있습니다.
Combine 사용 예시
이제 Combine의 기본적인 개념에 대해 알아보았으니 실제 사용 예시를 살펴보겠습니다.
import Combine
let publisher = [1,2,3,4,5].publisher // 1. Publisher 생성
publisher
.map { $0 * 2 } // 2. Operator를 통한 값 변환
.sink { print($0) } // 3. Subscriber를 통한 값 수신
해당 코드는 Combine 프레임워크를 활용하여 간단한 작업을 수행하고 있습니다. 한 단계씩 살펴보겠습니다.
- let publisher = [1,2,3,4,5].publisher: 여기서는 1부터 5까지의 숫자 배열을 생성하고, 이 배열을 Combine의 publisher로 변환합니다. 이렇게 되면 이 배열은 이벤트를 보낼 수 있는 'Publisher'가 됩니다.
- .map { $0 * 2 }: map은 Combine에서 제공하는 여러 'Operator' 중 하나입니다. 이 연산자는 'Publisher'가 방출하는 각 값을 가져와서 주어진 클로저 함수를 통해 변환합니다. 여기서는 각 숫자를 2배로 만드는 작업을 수행하고 있습니다.
- .sink { print($0) }: sink는 'Subscriber' 역할을 하는 메소드입니다. 이 메소드는 'Publisher'가 방출하는 값을 수신하여 주어진 클로저 함수를 수행합니다. 여기서는 받은 값을 콘솔에 출력하는 작업을 수행하고 있습니다.
따라서 이 코드는 1부터 5까지의 숫자 각각을 2배로 만들고, 그 결과를 콘솔에 출력하는 작업을 수행하는 것입니다. 이를 통해 Combine 프레임워크를 활용하면 복잡한 비동기 작업을 간단하게 수행할 수 있음을 알 수 있습니다.
이번 포스팅에서는 Combine에 대해 간단히 정리를 해보았습니다. Combine을 사용하면 이벤트 처리 코드를 중앙 집중화하고 클로저 및 규칙 기반 콜백과 같은 기술을 제거할 수 있어서 코드를 더 쉽게 유지보수 할 수 있다는 장점이 있습니다.
감사합니다.
잘못된 내용이 있거나 더 좋은 내용 피드백은 언제나 환영합니다!
궁금하신 부분은 댓글로 질문 부탁드립니다!
'Apple > Swift' 카테고리의 다른 글
[Swift] 초기화(Initializers) 알아보기 (1) - 초기화의 개념과 사용 방법, 규칙 (0) | 2024.01.29 |
---|---|
[Swift] Combine의 Operator 알아보기 (0) | 2024.01.28 |
[Swift] Generic과 Type 이해하기 (2) | 2024.01.09 |
[Swift] Generic 이해하기 (0) | 2024.01.04 |
[Swift] 예외처리 - 만약 에러가 발생한다면?? (2) | 2024.01.03 |