study record
[Combine] 1. Hello Combine! 본문
* 'Combine: Asynchronous Programming With Swift' 책을 읽고 작성하는 글입니다.
이 책의 목적: Combine framework를 소개하고, Swift로 선언형 리액티브 앱 작성하기
Combine은 앱의 이벤트 처리에 대한 선언형 접근을 제공한다. 다양한 delegate callback과 completion handler closure 사용보다 하나의 chain을 만들 수 있다. 각 체인의 파트는 이전 스텝으로부터 받은 값들의 고유한 액션을 수행하는 Combine operator이다.
Combine이 무슨 프레임워크인지?
Combine은 Swift에서 비동기 이벤트 처리와 반응형 프로그래밍을 위해 제공되는 프레임워크
Combine 프레임워크는 Swift에서 제공하는 특별한 도구이다. 이 도구는 시간이 지남에 따라 변경되는 값을 처리하는 데 도움을 준다. 이 값들은 다양한 종류의 비동기 이벤트, 즉 동시에 일어나지 않고 각기 다른 시간에 발생하는 여러 사건들을 나타낼 수 있다.
Combine에서는 이러한 비동기 이벤트를 관리하기 위해 'Publisher'와 'Subscriber'라는 두 가지 주요 구성 요소를 사용한다.
'Publisher'는 시간이 지나면서 변경될 수 있는 값을 '방출'한다. 예를 들어, 네트워크 요청의 결과나 사용자 인터페이스에서의 사용자 액션과 같은 것들이 될 수 있다.
반면에 'Subscriber'는 'Publisher'가 방출하는 값을 '수신'한다. 'Subscriber'는 받은 값에 대해 원하는 작업을 수행할 수 있다. 예를 들어, 화면에 결과를 표시하거나 다음 작업을 계획하는 등의 역할을 수행한다.
왜 Combine을 사용하는가?
- Combine을 사용하면 이벤트 처리 코드를 중앙 집중화하고 클로저 및 규칙 기반 콜백과 같은 기술을 제거할 수 있다. 가독성, 코드 유지보수에 도움이 된다.
- third party library를 사용하지 않고 apple 자체 프레임워크로 의존성을 줄일 수 있다.
- 다양한 operator를 사용하여 쉽게 직관적인 비동기 이벤트 처리 코드를 작성할 수 있다.
Combine Basics
Combine의 3가지 주요 요소 - Publishers, Operators, Subscribers.
Publishers
Publishers는 subscribers 같은 하나 또는 그 이상의ㅣ 관심대상에게 시간에 따라 값들을 방출할 수 있는 타입이다.
모든 publisher는 세 타입들의 이벤트를 방출할 수 있다.
- Output
- completion
- Failure
0에서 그 이상의 output 값들을 방출할 수 있다. 만약 완료된 경우 성공 또는 실패에 따라 이벤트를 방출하지 않을 것이다.
Publisher protocol은 두 개 타입의 generic이다.
- Publisher.Output
- Publisher.Failure
Failure 를 사용하고 싶지 않다면 Never를 사용한다.
Operators
Operators는 Publisher protocol에 정의된 메소드들이다.
효과적으로 체이닝할 수 있는 다양한 operators들을 호출할 수 있어 매우 유용하다.
하나의 subscription에 복잡한 로직을 실행하기 위해 combine시킬수 있다.
output이 다음의 Input에 맞지 않을 때 매우 유용하게 사용할 수 있다.
Subscribers
모든 Subscription은 subscriber와 함께 끝난다.
Subscribers는 output과 completion event와 함께 일을 한다.
Combine은 두 개의 내재된 subscribers를 제공한다.
- sink
- output value와 completion을 받는 클로저를 제공한다.
- assign
- output이 프로퍼티에 bind되도록 해준다.
Subscriptions
Subscription의 끝에 subscriber를 추가할 때, 이것이 publisher를 활성화시키는 역할을 한다. publisher는 output을 받을 subscribers가 없으면 아무 값도 방출하지 않는다.
한 번 subscription을 설정하면, 그 object에 데이터를 push, pull callback에 대한 것을 시스템이 모든것을 알아서 운영한다.
또한 subscription에 대한 메모리 관리를 할 필요도 없다. Cancellable protocol을 사용하면 된다.
publisher, operators, subscriber call chain 모두가 Cancellable object를 리턴한다. 따라서 메모리로부터 해당 object를 방출하고자 할때마다 모든 subscription을 취소하고 메모리로부터 자원을 해제한다.
이 과정을 자동화하기 위해 [AnyCancellable] collection 프로퍼티를 가지고 subscriptions을 던질 수 있다. 이것은 자동으로 취소하고 프로퍼티가 해제될때 subscriptions을 해제시킨다.
'Swift > Combine' 카테고리의 다른 글
[Combine] map+switchLatest로 flatMapLatest 대체하기 (0) | 2025.01.13 |
---|---|
[Swift Combine] Future, Deferred (0) | 2024.03.31 |
[Swift] Combine이란? (0) | 2023.01.03 |