Sign In
상태
Empty
담당자
Empty
작성자
한결
작성시각
RXSwift 기본
•
RX의 기본 컨셉은 우리가 작성한 코드가 앱 안에서 기본적으로 라인바이라인으로 동작하는 것이 아니다에 있다.
💬
ReactiveX, many instructions may execute in parallel and their results are later captured, in arbitrary order, by “observers.”
•
RX의 컨셉에 따라, 앱 전반적인 동작 상태에서 아래의 과정이 병렬적으로( ~= 비동기적으로) 진행되고, Observer에 의해 연산된 결과가 뷰에 전달된다.
◦
Observable에 맡겨둔 이벤트가 감지되면
◦
Observer에 등록해둔 연산(어떤 로직)이 Stream에 따라 동작하여
◦
결과를 전달한다.
•
Observable과 Observer의 관계는 기본적으로 subscribe라고 하는 구독 여부에 의해 형성된다.
◦
Observable에 연결된 Observer가 없다면, 이벤트 감지에 따른 어떤 스트림도 발생하지 않기에 Observer 구독이 시작된 시점부터 이벤트에 대한 적절한 처리가 진행될 것이다.
◦
물론 구독 관계가 형성되어 있다가 관계를 끊는 unsubscribe 과정도 진행할 수 있다.
•
구독 관계는 Observable의 메서드를 통해 형성된다.
◦
onNext: 이벤트를 단계적으로 인식시킨다. emit(배출)된 이벤트마다 해당 메서드가 동작된다.
◦
onCompleted: 이벤트에 대한 처리를 성공적으로 처리한 상태에 호출된다. 모든 onNext 처리가 된 다음 마지막으로 실행된다.
◦
onError: onNext로 인지된 이벤트 처리 도중에 에러가 발생할 경우 호출된다. 에러가 탐지된 경우, onCompleted도 동작하지 않는다.
◦
onCompleted, onError는 당연하겠지만 동시에 호출될 수 없다. 이벤트 구독에 따른 스트림 처리 결과는 성공 / 실패 뿐인 것이다.
◦
Observable이 deinit 되는 시점, 스트림이 종료되는 시점에 Dispose된다.
▪
물론, UI단에서 버튼의 터치가 종료되는(?) 상황은 없기 때문에 dispose가 되지 않는 이런 경우도 있다.
•
기본적으로 RX를 Swift에 다룬다고 할 때 신경써야 할 것은,
1.
Observable에 어떤 이벤트를 각인시키고,
2.
이벤트를 처리하여 결과를 보여줄 Observer 대상은 누구인지를 잘 결정하는 것이다.
3.
Observable의 구독은 결국 Disposable(= 구독을 중지할 수 있는 가능성을 가진 프로토콜)을 반환하기 때문에, 더 이상 구독이 필요없는 이벤트를 위해 메모리를 힘들게 할 필요는 없다. 적절한 구독 해지를 도와줄 disposeBag을 잘 활용하자.
func fieldHandler() {
    textField.rx.value   // textField라는 Observable에 value 이벤트를 주고
        .bind(to: label.rx.text) // textField의 텍스트를 보여줄 Observer를 지정해서 바인딩
        .disposed(by: disposebag)
}