목록전체 글 (45)
개발콩블로그

안녕하세요 개발콩입니다. 😁요즘 날씨가 많이 따뜻해지고 있는 것 같습니다.봄이 온다는 것은 약간의 설레임을 불어오는 것 같아요. 오늘은 RxSwift에서 구독을 하는 다양한 방법(subscribe, bind, drive)을 알아보도록 하겠습니다.지난 게시글에서는 Observable과 Observer의 역할을 하는 Subject, Relay에 대해서 알아보았습니다.이러한 차이점을 이해하고 구독을 하는 다양한 방법에 대해 선택하는 것은 중요할 것 같습니다.바로 시작해볼까요? 상황 설정아래 모든 상황에 대한 가정은 다음과 같습니다.네트워크 통신에 대해서 이벤트가 방출됩니다. (비동기 상황에서 값이 들어옵니다.)해당 이벤트에 대한 처리를 하여 UI에 반영해야합니다. Subscribelet publishSu..
안녕하세요 개발콩입니다!오늘은 Observable과 Observer의 역할을 하는 Relay에 대해서 알아보도록하겠습니다. 오늘 소개하는 Relay는 지난 글에서 소개했던 Subject와 역할이 매우 유사합니다.이벤트를 방출하는 Observable의 역할을 수행할 수 있습니다.이벤트를 받고 처리하는 Observer의 역할을 수행할 수 있습니다. 하지만 Relay는 Subject와는 다른 큰 차이점이 있습니다.complete 이벤트를 받을 수 없습니다.error 이벤트를 받을 수 없습니다.그렇기 때문에 Relay는 next 이벤트(accept)만 처리할 수 있습니다. 왜 Relay를 사용해야할까?이와 비슷한 Subject를 사용하는 예시를 생각해봅시다.우리는 Subject에서 방출된 이벤트를 처리하..
안녕하세요 개발콩입니다!RxSwift는 사용하는 것도 중요하지만 잘 알고 적절하게 사용하는 것이 중요한 것 같습니다.오늘은 Subject에 대해서 알아보도록 하겠습니다. Subject이벤트 방출하는 Observable의 역할을 수행할 수 있습니다.이벤트를 받고 처리하는 Observer의 역할을 수행할 수 있습니다.Subject의 종류에는 4가지가 있습니다.PublishSubjectBehaviorSubjectReplaySubjectAsyncSubject4가지의 Subject에 대해서 알아보도록 하겠습니다. PublishSubject초기값이 없습니다.구독 이후의 시점부터 방출되는 이벤트를 처리할 수 있습니다.let publishSubject = PublishSubject()publishSubject ..
안녕하세요 개발콩입니다!오늘은 ObservableType과 ObserverType에 대한 글을 작성해보도록 하겠습니다. 바로 Observable과 Observer가 채택하는 프로토콜을 알아볼까요?ObservableType Protocolpublic protocol ObservableType: ObservableConvertibleType { func subscribe(_ observer: Observer) -> Disposable where Observer.Element == Element}extension ObservableType { public func subscribe(_ on: @escaping (Event) -> Void) -> Disposable { let obser..

안녕하세요 개발콩입니다.오늘은 RxSwift의 시작인 Observable과 Observer에 대해서 소개하고자 합니다. ReactiveXObservable streams을 활용하는 비동기 프로그래밍을 위한 API 우리가 작성한 코드가 1부터 1000까지 진행된다고 가정했을 때,대부분의 코드는 1부터 1000까지 순서대로 동작하지 않습니다. 예를들어 특정 상황에서 버튼이 클릭되었다면? 검색어가 입력되었다면?이런 경우에는 미리 작성해둔 특정한 코드 구간이 실행될 것입니다. 우리는 이러한 상황을 처리하기 위해서 아래 4가지 방법을 이용해왔습니다.ClosureGCD(Grand Central Dispatch)DelegateNotification Center이러한 방법을 조금 더 쉽고 편리하게 제공하는 것이 R..

안녕하세요! 개발콩입니다.오늘은중첩 클로저로 인한 순환 참조되어 메모리 누수가 발생되는 문제를 해결한 글에 대해서 작성하고자 합니다. 문제 상황output.updatePersonData .bind(to: tableView.rx.items( cellIdentifier: PersonTableViewCell.identifier, cellType: PersonTableViewCell.self )) { (row, element, cell) in cell.configureView(element) cell.detailButton.rx.tap .map { row } .bind(with: self) { owner, in..

안녕하세요!개발콩입니다. 오늘은 RxSwift operator 중 throttle와 debounce에 대해서 소개하도록 하겠습니다. 왜 필요할까?우리는 앱에서 기능 개발을 할 경우 아래와 같은 상황을 마주하게 될 수 있습니다.검색 버튼을 클릭하게 된다면 네트워크 요청을 합니다.검색어의 입력값이 변하게 될 때마다 네트워크 요청을 합니다. 이 두가지의 경우에는 모두 사용자가 반복적으로 여러번 입력할 수 있다는 것 입니다.if) 사용자가 버튼을 짧은 시간 내에 연타하게 된다면?if) '사과'를 검색하기 위해서 ㅅ, 사, 삭, 사고, 사과 와 같이 짧은 시간 내의 5번의 변화가 일어나게 된다면? 불필요한 네트워크 요청을 하게 되고 이것은 서버에 부담이 될 수 있습니다.이때 고려해볼 수 있는 것이 RxSwift ..

안녕하세요!개발콩입니다. 오늘은 RxSwift operator 중 zip와 combineLatest에 대해서 소개하도록 하겠습니다. Zipzip은 여러 Observable의 방출을 지정된 함수로 결합하고, 각 결합에 대한 결과를 바탕으로 하나의 항목을 방출합니다.값들이 동시에 방출되지 않아도 순차적으로 결합을 시도합니다. 예시 코드let observable1 = PublishSubject()let observable2 = PublishSubject()Observable.zip(observable1, observable2) .subscribe(onNext: { print($0) }) .disposed(by: disposeBag)obs1.onNext("A") // 실행 X (observabl..