본문 바로가기

Swift/RxSwift

(20)
[✨ReactiveX] Reactive Introduce / Observable Reactive Introduce Reactive Programming Reactive Programming이란? : 비동기적 데이터 흐름과 전달에 관한 프로그래밍 패러다임입니다. 이러한 Reactive Programming의 핵심은 모든 것을 비동기적인 데이터의 스트림으로 간주하고 다양한 방법을 통해서 비동기 이벤트를 처리하는 것입니다. 👩🏻‍💻 개발자 프로그래머가 특정 기능을 직접 정해서 실행되도록 처리하는 것이 아니라 시스템 이벤트가 발생했을 때 이를 알아서 처리할 수 있도록 하는 것을 말합니다. 시스템 이벤트가 발생했을 때 이를 알아서 처리할 수 있다? 즉, 메서드의 호출로 동작되는 것이 아니라 Observable 안에 데이터를 조회하고 변환하는 메커니즘을 작성하면 Observable이 이벤트를 ..
[RxSwift] Reactive Programming / Memory Leak Reactive Programming Reactive Programming이란 비동기적 데이터 흐름과 전달에 관한 프로그래밍 패러다임이다. Reative Programming의 핵심은 모든 것을 비동기적 데이터의 stream으로 간주하고 다양한 방법을 통해 이러한 비동기 이벤트를 처리하는 것이다. 프로그래머가 특정 기능을 직접 정해서 실행되도록 처리하는 것이 아니라 시스템 이벤트가 발생되었을 때, 이를 알아서 처리할 수 있도록 하는 것이다. 사용자의 입장에서는 Reative Programming을 기반으로 작성된 프로그램은 실시간성을 가진다. 프로그래머가 작성한 순서와 다르게 사용자와 상호작용하며 그에 따라서 실시간으로 화면이 변하는 것이다. 이를 실행하기 위해서 프로그램이 지속적으로 특정 값에 대한 관..
[🌱SeSAC] Rx복습, RxAlamofire/RxDataSource Rx .. 무시무시 어마무시 .. !! MVVM Pattern MVVM 패턴의 가장 큰 핵심은 양방향 데이터 바인딩이다. 양뱡향 데이터 바인딩을 위해서 아래와 같은 Observable 클래스를 만들었다. import Foundation class CObservable { private var listener: ((T) -> Void)? var value: T { didSet { listener?(value) } } init(_ value: T) { self.value = value } func bind(_ closure: @escaping (T) -> Void) { closure(value) listener = closure } } Q : 왜 이런 클래스를 만들었을까? A : 위에서 말했지만, 단방향 데..
[🔥Rx뿌셔] Relay Relay란? 우선, Relay는 RxCocoa에 속해 있는 클래스이다. RxSwift가 아니라, RxCocoa에 속하는 개념으로 그 종류는 크게 세가지가 있다. Relay는 크게 세 가지 클래스가 있다. Publisch Relay Behavior Relay Replay Relay 각 PublishRelay와 BehaviorRelay는 이름에서 알 수 있듯이 PublishSubject랑 BehaviorSubject의 wrapper 클래스이다. 🤔 Relay와 Subject의 차이는 무엇일까? 이벤트를 방출하는 스타일의 차이이다. ✔️ Subject는 Observale와 같이 onNext, onError, onCompleted 이렇게 세 가지의 이벤트를 방출 시킬 수 있다. ✔️ Relay는 onNext ..
[🔥Rx뿌셔] Subject - Replay Subject Replay Subject Buffer Size만큼의 최신 값을 저장했다가 emit하는 Subject Relplay Subject는 이전에 방출됐던 요소들을 버퍼에 저장해 두었다가 새로운 구독자가 구독되었을 때 같이 넘겨주는 방식의 Subject 이미지로 나타내면 아래와 같다. 이전에 설명했던, Behavior Subject와 비슷하다. ✔️ 다른 점이 있다면 Behavior Subject와 다르게 제일 처음 구독자를 위한 초기값을 설정할 필요가 없고, ✔️ 가장 최근에 방출된 요소들의 (=전달받을 요소들의) 최대 개수를 지정할 수 있다. 코드로 구현하면 아래와 같다. let replay = ReplaySubject.create(bufferSize: 3) Replay Subject는 다른 Subject와..
[🔥Rx뿌셔] Subject - BehaviorSubject Behavior Subject BehaviorSubject는 PublishSubject와는 다르게 초기값을 가지고 시작한다. 다만, 그 초기값이 매번 일정한 것이 아닌 가장 마지막에 방출되었던 값이 초기값으로 지정된다. 이를 그림으로 확인하면 아래와 같다. -> Observable을 제일 처음 구독하는 구독자는 설정해준 초기 값으로 시작을 하게 되고, 그 다음구독자 부터는 구독하기 직전에 방출되었던 값으로 시작을 하게 된다. 코드로 구현하면 아래와 같다. let behaviorSubject = BehaviorSubject(value: "난 초기값이 있지롱") BahaviorSubject는 항상 초기값을 가지고 시작하기 때문에 초기화하는 방식도 PublishSubject와 조금 다르다. 이런식으로 초기화 ..
[🔥Rx뿌셔] Subject - Publish Subject Subject Subject는 Observable이자, Observer인 존재이다. 값을 수동으로 추가할 수 있으며 해당 값을 이미 구독 중인 subscriber에 emit할 수 있다. 예시 코드를 보자. ⬇️ // 1 let subject = PublishSubject() // 2 subject.onNext("듣고 있니 .. ?") // 3 let subscriptionOne = subject .subscribe(onNext: { (string) in print(string) }) // 4 subject.on(.next("얌마.")) // print: 얌마. // 5 subject.onNext("듣고 있냐고.") // print: 듣고 있냐고. 위의 코드에서 주석으로 표시한 숫자의 흐름은 아래와 동일하..
[🔥Rx뿌셔] Hot Observable VS Cold Observable Observable은 이벤트를 emit하는 요소이다. 그리고 이 Observable의 형태/종류는 크게 두가지로 나눌 수 있다. Hot Observable 🔥 은 구독 여부에 관계 없이 요소를 방출해주는 Observable, Cold Observable🧊 은 구독이 되어야지 비로서 요소가 방출이 되는 Observable 이다. 🧊 Cold Observable 일단 Cold Observable🧊은 우리가 일반적으로 지금까지 사용해오던 Observable이다. 즉 of, just, from, 그리고 커스텀하게 만든 Observable 에 별다른 처리를 하지 않았다면 모두 Cold Observable🧊 이다. 이 Observable은 구현을 하고 나서, 구독을 하지 않으면 요소가 절대 방출되지 않는다. 이름처..