본문 바로가기

Swift

(53)
[✨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을 기반으로 작성된 프로그램은 실시간성을 가진다. 프로그래머가 작성한 순서와 다르게 사용자와 상호작용하며 그에 따라서 실시간으로 화면이 변하는 것이다. 이를 실행하기 위해서 프로그램이 지속적으로 특정 값에 대한 관..
Automatic Reference Counting (ARC) 오랜만에 돌아왔습니다. 무엇으로? ARC로. 자다가도 누가 ARC가 뭐야?라고 물어보면 답해야 하는 것이 iOS 개발자의 숙명 .. 공식문서를 읽어보면서(= 번역하면서) ARC를 제대로 이해해보자!!!!!! 서론 Swift는 ARC(Automatic Reference Counting)를 사용하여 앱의 메모리 사용량을 추적하고 관리한다. 대부분의 경우, Swift에서 자동으로 메모리를 관리하기 때문에 이에 직접적으로 생각할 필요가 없다. ARC는 클래스 인스턴스가 더 이상 필요하지 않게 되면 메모리에서 인스턴스를 자동으로 해제한다. 단, ARC에서는 메모리를 관리하기 위하여 코드 간의 관계에 대해 자세한 정보가 필요한 경우가 있다. 이 장에서는 이러한 상황을 설명하고 ARC가 앱의 모든 메모리를 관리할 수..
[MVVM] associatedtype으로 ViewModel 구조 추상화 associatedtype - Generic과 유사한 형태로, Protocol에서 사용될 타입에 대한 네임 스페이스, placeholer이다. - 실제로 Protocol을 채택해서 사용하기 전까지는 사용되는 타입이 무엇인지 명시가 되지 않는다. MVVM에서 Input/Output 패턴을 사용하면, 우리는 ViewModel마다 Input, Output구조체를 만들어줘야 한다. 이것이 과연 최선의 방법일까? 이것을 우리는 프로토콜을 이용해서 해결할 수 있다. 프로젝트를 구성하다 보면, 공통적으로 생기는 요소들, 반복되는 속성/메서드를 프로토콜의 형태로 사용할 수 있다. 만약, 프로퍼티의 타입이 동일하다면 그냥 작성하면 되지만, 각 화면의 뷰모델마다 서로 다른 Input, Output을 갖게 된다. 그러므로 ..
[MVVM] 인앤아웃버거? 인풋/아웃풋패턴! 인앤아웃 버거가 그렇게 짜다는데 .. 먹어봤어야 알지 .. 미국을 가봤어야 알지 !!! MVC패턴에서 UI부분과 비즈니스 로직을 분리해서 MVVM 패턴으로 개선할 수 있다. 그리고 이 MVVM 패턴에서 좀 더 데이터의 흐름을 분리하면, (UI 로직과 비즈니스 로직을 좀 더 분리하면 = 뷰에서는 로직에 대한 것을 모두 가리는 것, 없애는 것) Input/Output 패턴으로 개선할 수 있다. 개념은 간단(?)하다. Input 뷰로부터 전달된 데이터를 뷰모델에서 받게 되는 입력 데이터 VC -> VM Output 입력받은 데이터를 수정/변경해서 뷰에 표현하기 위한 출력 데이터 VM -> VC 간단한 예시로 말하자면 아래와 같다. ex) Input : 버튼의 탭, 텍스트 필드에 입력하는 텍스트 ex) Outp..
[🌱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와..