RxSwift 와 MVVM 디자인 패턴 https://younngjun.tistory.com/41 MVC 구조의 한계와 MVVM 출처 : fastcampus - 30 개 프로젝트로 배우는 iOS 앱 개발 MVC 디자인 패턴의 장점과 한계 기본적으로 Model, View, Controller 로 이루어져 있는 디자인 패턴이다. Apple 은 MVC 장점을 다음과 같이 정의한다. - younngjun.tistory.com 앞서 MVVM 디자인 패턴의 개념과 함께 MVVM 으로 디자인 된 앱 위에서 RxSwift 의 강력함을 짚고 넘어갔었다. 이번 공부에서는 왜 RxSwift 가 MVVM 과 함께 사용되었을 때 강력한지에 대해 이해해본다. struct Menu { var name: String var coun..
분류 전체보기
toArray Observable 의 독립적 요소들을 Array 로 만들 수 있는 방법이다. print("--------toArray--------") Observable.of("A", "B", "C") .toArray() .subscribe(onSuccess: { print($0) }) .disposed(by: disposeBag) --------toArray-------- ["A", "B", "C"] map Observable 에서 동작한다는 점만 제외하면 Swift 에서의 map 과 동일하다. print("--------map--------") Observable.of(Date()) .map { date -> String in let dateFormatter = DateFormatter() date..
ignoreElements onNext 이벤트를 무시한다. onComplete 나 onError 와 같은 정지 이벤트만 허용한다. print("-----ignoreElements-----") let sleepMode = PublishSubject() sleepMode .ignoreElements() .subscribe { _ in print("🔥") } .disposed(by: disposeBag) sleepMode.onNext("😂") sleepMode.onNext("😂") sleepMode.onNext("😂") -----ignoreElements----- print("-----ignoreElements-----") let sleepMode = PublishSubject() sleepMode .igno..
Subject 란? 먼저 Subject 중 하나인 PublishSubject 코드를 살펴보자. public final class PublishSubject : Observable , SubjectType , Cancelable , ObserverType , SynchronizeUnsubscribeType { ... Subject는 ObservableType 프로토콜을 채택하고 있는 Observable 을 상속하고 있으며, ObserverType 프로토콜을 채택하고 있다. 즉, Subject 가 Observable 로서 이벤트를 발행할 수도 있고, Observer 로서 발행하는 이벤트를 subscribe 할 수도 있는 것이다. 또한, Subject 는 multicast 방식이다. multicast가 방식이..
Traits 는 모든 경계에서 사용할 수 있는 원시 Observable 을 좀 더 좁은 범위로 제한하여 제공하는데, 인터페이스 경계에서 observable 프로퍼티를 전달하고 보장함으로써 코드에 대한 가독성을 높일 수 있다. Traits 는 read-only Observable 의 wrapper 형태로 구성되어 있다. 이렇게 Observable에 대한 접근을 제한해놓고 내부에 존재하는 Observable 를 조정하여 일부 기능에 특화된 형태로 사용자에게 제공한다. struct Single { let source: Observable ... } Single Success 또는 Error 이벤트를 한번만 방출하는 Observable 이다. 이때 success 는 onNext, onCompleted Event..
dispose Observable 을 생성하고, subscribe 를 했다면, 반드시 dispose 시켜주어 메모리 누수를 방지해야 한다. 이것이 하나의 Observable 생명 주기이다. Observable 은 subscribe 받기 전까지 아무 것도 하지 않는 하나의 sequence 일 뿐이다. 이때 subscribe 는 Observable 에 정의된 event 를 방출하는 방아쇠 역할을 하는데, dispose 는 방아쇠를 당겨서 방출했던 Observable 의 subscribe 을 취소하는 역할을 한다. 다음은 dispose 를 설명하기 위한 예시이다. Observable.of(1,2,3) .subscribe { print($0) } .dispose() 먼저 1,2,3 이라는 Int 타입 eleme..
Observable 과 .subscribe 이전 정리에서 Observable 을 생성하는 다양한 연산자를 알아보았다. 그렇다면 Observable 을 통해 방출되는 이벤트는 어떻게 확인할 수 있을까? 실제로 Observable 은 그냥 sequence 정의일 뿐이며, subscribe 되기 전에는 아무런 event 를 보내지 않는다. 즉, 표현한대로 동작하는지 확인하기 위해서는 subscribe 를 해야한다. Observable.just(1) .subscribe(onNext: { print($0) }) // 1 Observable.just([1,2,3,4,5]) .subscribe(onNext: { print($0) }) // [1,2,3,4,5] Observable.of([1,2,3,4,5]) .sub..
just 하나의 element 만 방출하는 단순한 형태의 연산자 Observable.just(1) Observable.just([1,2,3,4,5]) // 1 // [1,2,3,4,5] of 여러 element 를 나열하여 순차적으로 방출하는 연산자. 방출하고 싶은 event 를 , 로 나열해서 대입하면, 순차적으로 이벤트를 생성한다. Observable.of(1,2,3,4,5) // 1 // 2 // 3 // 4 // 5 방출하는 element 의 type 을 지정해주지 않아도, Observable 은 타입 추론을 통해 Observable Sequence 를 생성한다. Observable.of([1,2,3,4,5]) // [1,2,3,4,5] 위와 같은 경우는 Array 를 element 로 대입하였는..
기본 개념 Observable : Swift 에서 제공하는 Sequence 와 동일한 개념이다. Sequence : 개개의 요소들을 하나씩 순회할 수 있는 타입(e.g. 배열) RxSwift 를 이해하기 위해 반드시 알아야 할 구성요소 ① Observable : Sequence ② Operator : Observable 의 이벤트를 입력 받아 결과로 출력해내는 연산자 ③ Scheduler : 직접적으로 생성하거나 커스텀할 일은 거의 없다. Rx 의 DispatchQueue Observable 이란? Observable Observable class 는 Rx 코드의 기반이 된다. T 타입의 데이터 SnapShot 을 '전달' 할 수 있는 일련의 이벤트를 비동기적으로 생성하는 기능 → 다른 class 에서 ..
AppDelegate.swift 파일의 두 가지 주요 기능 iOS 프로젝트를 생성하면 자동으로 생성되는 AppDelegate.swift 파일은 두 가지 주요 기능을 담당한다. 첫 번째는 AppDelegate 클래스를 정의하는 것, 두 번째는 App 이 시작되는 진입점인 Entry point 를 알려주고, App 의 입력 이벤트를 전달하는 RunLoop 를 생성하는 역할을 하는 것이다. Playground 와 같이 위에서부터 아래로 차례대로 실행되는 단일 파일 기반의 절차적 코드를 작성할 때에는 앱이 어디서 시작하는지는 큰 상관이 없었다. 그러나 UIKit 과 같은 프레임워크 기반 프로그램은 다르다. 파일에는 그저 타입과 그 멤버들을 선언만 하였지, 언제 어떻게 실행시키는지는 전혀 적지 않았으므로, 우리는..