Combine의 큰 그림과 개요

5009 단어 combineswiftios

소개



Apple은 WWDC19에서 Combine 프레임워크를 발표했습니다. 이 프레임워크는 반응형 프로그래밍과 선언적 코딩을 가능하게 합니다. 이 기사에서는 Combine에 대한 간략한 개요와 Combine의 큰 그림을 제공합니다.



리액티브 프로그래밍이란?



리액티브 프로그래밍을 이해하는 데 도움이 되도록 절차적 코드가 어떻게 실시간이 아닌지에 대한 예가 있습니다.

var a = 5
let b = 10
let flag = a > b
print(flag) // => false
a = 20
// of course, flag remains unchanged and remains false
print(flag) // => false


다음 코드는 반응형 프로그래밍을 사용하여 실시간으로 변경되는 값을 처리하는 방법을 보여줍니다.

let a = CurrentValueSubject<Int, Never>(5)
let b = Just(10) // Let 10 be the only element

let publisher = b.combineLatest(a)
  .map { $0 < $1 } // true if b < a

_ = publisher
  .sink { 
    // When the element `a` changes from 10 to 20, 
    // false and true are output one after another.
    print($0)   // => false
                // => true
  } 

a.send(20) // Send 20 as an element of a


n iOS 앱 개발 시 실시간으로 값의 변화를 감지할 수 있는 다양한 이벤트 알림 방식이 있습니다.
그러나 Combine의 장점은 다른 플랫폼에서 사용되는 일반화된 리액티브 프로그래밍 사양인 ReactiveStreams 기반의 공식 프레임워크로 이를 수행할 수 있다는 것입니다.

발행자



요소를 이벤트로 알리는 개념을 게시자라고 합니다. Publisher라는 이름은 ReactiveStreams 사양에서 따온 그대로이며 사양을 따르지 않는 RxSwift의 Observable과 동일합니다.

구독자



Subscriber는 Publisher 이벤트를 처리하기 위한 프로토콜로 제공됩니다. 구독자를 직접 사용하는 대신 구독자는 이벤트를 처리하는 싱크 메서드와 같은 게시자 프로토콜 확장으로 간접적으로 사용되는 경우가 많습니다. Subscriber라는 이름도 ReactiveStreams 사양을 기반으로 합니다. RxSwift는 Observer에서 비슷한 개념을 가지고 있습니다.

게시자



지도와 같은 연산자가 사용하는 다양한 유형은 게시자 호환 게시자로 열거되며 운영자가 스트림을 처리하고 열거된 각 유형으로 변환할 수 있습니다.

신청



Combine은 Reactive Manifesto를 기반으로 하는 ReactiveStreams 사양을 부분적으로 준수합니다. Reactive Manifesto는 iOS와 같은 모바일 앱뿐만 아니라 모든 애플리케이션의 디자인을 가리키는 시스템 디자인 패턴입니다. 따라서 서버 측 응용 프로그램에 필요한 내결함성 성도 고려합니다. Reactive Manifesto를 따르는 ReactiveStreams 사양은 Publisher와 Subscriber 간의 알림을 제어하고 이에 대한 부하를 줄이기 위해 존재합니다. 그래서. 이것을 배압이라고 합니다. 물론 부하를 줄이는 것 외에도 Subscription의 역할은 사양의 형태로 제어 방법을 제공하는 것입니다.

그러나 구독을 생성할지 여부는 자신의 게시자를 생성하는지 아니면 게시자를 생성하는지에 따라 다릅니다.

주제



Subject는 외부에서 이벤트를 생성할 수 있는 매우 유연한 게시자입니다. CurrentValueSubject에는 초기 값이 있습니다.

가입자



구독자는 구독자 역할을 하는 유형의 네임스페이스로 제공됩니다.

자원:



  • Getting Started with Combine - Shai Mishali - App Builders 2020
  • Processing Published Elements with Subscribers
  • 좋은 웹페이지 즐겨찾기