study record

[Combine] 1. Hello Combine! 본문

Swift/Combine

[Combine] 1. Hello Combine!

asong 2024. 8. 28. 09:23

* '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는 세 타입들의 이벤트를 방출할 수 있다.

  1. Output
  2. completion
  3. 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