RXSwift 기초

Rxswift 란? 함수형 프로그래밍에 반응형 프로그래밍이 더해진 FRP(Functional Reactive Programming)로 프로그래밍을 할 수 있게 합니다.

함수형 프로그래밍

  • 함수형 프로그래밍은 선언형 프로그래밍으로 어떻게가 아닌 무엇을 정의합니다.
  • 목적 위주로 기술하며, 데이터의 입력이 주어지고 데이터의 흐름을 추상적으로 정의하는 방식 입니다.

객체 지향(object-oriented)은 대부분의 프로그래밍에서 필수적이었습니다. 코드는 프로그램에 수행 할 작업을 알려주고 변경 사항을 수신하는 여러 가지 방법이 있습니다. 그러나 무언가 변경되면 시스템에 알려야합니다.
코드 업데이트가 변경 사항을 자동으로 반영하도록 설정할 수 있다면 더 좋지 않을까요? 이것이 바로 반응형 프로그래밍의 개념입니다. 애플리케이션은 사용자가 지시하지 않고도 기본 데이터의 변경에 반응 할 수 있습니다. 이렇게하면 특정 상태를 유지하는 것보다 당면한 논리에 더 쉽게 집중할 수 있습니다.
Key-Value Observation과 didSet을 사용하여 Swift에서 이를 달성 할 수 있지만 설정이 번거로울 수 있습니다. 또는 Swift에는 반응형 프로그래밍을 용이하게하는 여러 프레임 워크가 있습니다.

What are RxSwift and RxCocoa?

RxSwift 및 RxCocoa는 여러 프로그래밍 언어 및 플랫폼을 포괄하는 ReactiveX (Rx) 언어 도구 제품군의 일부입니다.
ReactiveX는 .NET / C # 에코 시스템의 일부로 시작되었지만 Rubyists, JavaScript 사용자, 특히 Java 및 Android 개발자에게 큰 인기를 얻었습니다.
RxSwift는 Swift 프로그래밍 언어와 상호 작용하기위한 프레임 워크인 반면 RxCocoa는 iOS 및 OS X에서 사용되는 Cocoa API를 반응 기술과 함께 사용하기 쉽게 만드는 프레임 워크입니다.
ReactiveX 프레임워크는 여러 프로그래밍 언어에서 반복적으로 사용되는 작업에 대한 공통 어휘를 제공합니다. 이렇게하면 공통 작업을 각각의 새 언어에 매핑하는 방법을 알아내는 대신 언어 자체의 구문에 쉽게 집중할 수 있습니다.

Observables and Observers

두 가지 핵심 개념은 Observable과 Observer입니다.

  • Observable은 변경 알림을 방출*emits 합니다.
  • Observer는 Observable을 구독*subscribes하고 해당 Observable이 변경되면 알림을 받습니다.

Observable을 구독하는 여러 Observer를 가질 수 있습니다. Observable이 변경되면 모든 Observer에게 알립니다.

The DisposeBag

DisposeBag은 RxSwift가 ARC 및 메모리 관리를 처리하는 데 도움이되는 추가 도구입니다. 부모 개체를 할당 해제하면 DisposeBag에서 Observer 개체가 삭제됩니다.
DisposeBag를 보유하는 객체에서 deinit ()가 호출되면 각 일회용 Observer는 관찰중인 항목에서 자동으로 구독 취소됩니다. 이를 통해 ARC는 평소처럼 메모리를 회수 할 수 있습니다.
DisposeBag가 없으면 두 가지 결과 중 하나를 얻을 수 있습니다. Observer는 무기한으로 관찰중인 항목에 매달리는 유지주기를 생성하거나 할당 해제되어 충돌을 일으킬 수 있습니다.
훌륭한 ARC 시민이 되려면 Observable 개체를 설정할 때 DisposeBag에 추가해야합니다. DisposeBag이 깔끔하게 정리 할것입니다.

Observable 에는 두가지 유형이 있습니다. Hot Observable 과 Cold Observable 입니다.

Hot Observable
일반 적인 사용자 observable 이며 생성과 동시에 이벤트를 방출합니다. subscrible 되는 시점과 상관없이 Observer 에 이벤트를 방출합니다.
즉, 생성 후 subscribe 하지 않고 있다가 특정 지점에서 구독할 경우 그때부터 이벤트를 방출하는것입니다.

Cold Observalble
just, of, from, create가 있으며 Subscribe 되는 시점 부터 이벤트를 생성해 방출합니다. 즉, 최초 생성된 값부터 이후까지 계속 방출 됩니다.

just
하나의 파라메터를 받아 하나의 이벤트를 발생 시킵니다.

Observalbe.just("aaron")
.subscribe(onNext: { print($0) })
.disposed(by:disposeBag)

// aaron

of
파라미터의 타입을 전달, 배열이라면 배열 자체를 전달합니다.

Observable.of(["1", "2"])
.subscribe(onNext: { print($0) })
.disposed(by:disposeBag)

// ["1", "2"]

from
배열 타입을 전달받아 안에 있는 요소를 꺼내어 방출합니다.

Observable.from(["1", "2"])
.subscribe(onNext: { print($0) })
.disposed(by:disposeBag)

// 1
// 2

create
가장 기본적인 Observable 생성 메서드 입니다.

아래는 기본적으로

let createObservable = Observable<String>.create { (observer) -> Disposable in
            observer.onNext("1") // 이벤트를 발생시킨다
            observer.onCompleted() // obserbable을 (완료)completed 시킨다
            return Disposables.create() // 생성된 observable을 반환한다.
        }.subscribe(onNext: {
            print($0) // 이벤트 받음
        }, onError: {
            print($0) // 오류발생
        }, onCompleted: {
            // 완료됨
        }, onDisposed: {
            //제거됨
        }).disposed(by:disposeBag)

debug()를 통헤 Observable의 동작과정을 로그로 볼 수 있습니다.

에 발행했습니다
RXSWIFT(으)로 분류되었습니다

aaron님이 작성

아무것도 안해도 시간은 흐른다.

댓글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다