Reactive Programming RxSwift

1 분 소요

리액티브(반응형) 프로그래밍이란?

리액티브 프로그래밍은 데이터 스트림의 변화와 전파에 관련된 선언형 프로그래밍 패러다임입니다. 이 패러다임은 배열과 같은 정적 데이터와 발생 이벤트와 같은 동적 데이터 스트림을 쉽게 표현할 수 있습니다. 또한 변경된 데이터 플로우의 전달을 쉽게 합니다.

ReactiveX란?

리액티브 프로그래밍을 구현하기 위한 API입니다. 여러 리액티브 프로그래밍을 구현하기 위한 구현체 중 하나입니다.

RxSwfit란?

리액티브 프로그래밍을 Swift에서 구현하기 위한 API입니다. 다른 많은 Swift 리액티브 API 구현체가 존재합니다.

Combine이란?

애플에서 구현한 리액티브 프레임워크입니다. 비동기 이벤트 및 이벤트 처리 연산자를 사용할 수 있습니다. RxSwift 서드파티 라이브러리라면 Combine은 퍼스트파티라고 볼 수 있습니다.

Observable

Observable은 ObservableType 프로토콜을 따르는 클래스입니다.

public class Observable<Element>: ObservableType

상태를 가지고 있지 않습니다. 하나의 Observable을 다중 subscribe해도 각 subscribe마다 각각의 observer 코드가 실행되고 결과를 전달합니다.

Subject

Subject는 Observable을 상속하고 ObserverType 프로토콜을 채택하는 클래스입니다.

public final class PublishSubject<Element>: Observable<Element>, SubjectType, Cancelable, ObserverType, SynchronizedUnsubscribeType

상태를 가지고 있습니다. 하나의 Subject를 다중 subscribe하면 모든 구독자가 하나의 실행 결과값을 받을 수 있습니다.

Observable 살펴보기

데이터를 그대로 발행하는 observable의 just 연산자를 살펴봅시다. just 연산자는 ObservableType 프로토콜에서 선언 및 구현하고 있습니다. 구현 내용으로는 Just 클래스를 생성하여 반환합니다. 이제 Just 클래스를 살펴봅시다.

extension ObservableType {
    public static func just(_ element: Element) -> Observable<Element> {
        Just(element: element)
    }
}

Just 클래스는 Producer 클래스를 상속하고 subscribe 메서드를 가지고 있습니다. Just 클래스의 subscribe 메서드는 전달받은 observer에 element를 전달하고 completed를 호출합니다.

final private class Just<Element>: Producer<Element> {
    private let element: Element
    
    init(element: Element) {
        self.element = element
    }
    
    override func subscribe<Observer: ObserverType>(_ observer: Observer) -> Disposable where Observer.Element == Element {
        observer.on(.next(self.element))
        observer.on(.completed)
        return Disposables.create()
    }
}

ObservableType 프로토콜의 just 메서드(연산자)에서 알 수 있듯이 just는 observable을 생성, 반환합니다. 생성된 observable은 이후에 subscribe하여 데이터를 전달받게 됩니다.

참고 URL


Wikipedia Reactive programming

Wikipedia Functional reactive programming

ReactiveX

Why use Rx?

[RxSwift] 들어가기 전에 시리즈

1. RxJava - Rxjava란? 시리즈

RxSwift vs Combine - 스펙 / 성능 개념 비교

Combine (1) - Publisher, Subscriber 시리즈

Combine 🤝 RxSwift 🤝 ReactiveSwift

카테고리:

업데이트:

댓글남기기