티스토리 뷰

RxSwift를 공부하고나서 정리한 글입니다.

큰 틀에서 보면 ObserverObservable 에 대해 이해만 하신다면 RxSwift에 대해 크게 어려움이 없으실 겁니다.

아래는 ObserverObservable에 대한 대략적 설명입니다.


관찰자(Observer) 보초병이라 가정하고, 관찰가능한 무언가는 수신 무전기(Observable)라고 가정 하겠습니다.


보초병 보초를 서다 무언가를 발견합니다. 이상함을 감지한 보초병은 송신 무전기를 통해 이상을 알립니다. (이벤트 발생)

당직본부에서 수신 무전기 (구독자)를 가지고 있던 당직사관이 무전을 감지하여 병력을 파견 합니다. (이벤트 발생에 따른 처리)


여기서 보초병의 송신무전기가 Observer 가 됩니다.

당직사관이 가지고 있는 수신 무전기가 Observable 이 됩니다.


여기서 명심하실것은 이벤트의 발생은 보초병의 송신 무전기  하고, 이벤트의 구독은 수신 무전기 가 한다고 생각만 하시면 됩니다.


RxSwfit로 돌아와 ObserverObservable 을 설명하자면


[Observer]

- 관찰자 입니다. 

- 사실 해당 클래스는 단독으로 쓰이는 경우는 거의 없습니다. 대부분 Observable 와 묶어 Subject 와 사용 합니다.

ex)


  let testObserver: AnyObserver<String>



[Observable]

- 단어의 뜻으로는 "관찰할 수 있는 (객체) "의 의미를 가지며, Observer 를 통하여 발생한 이벤트를 구독하는 클래스입니다.

- subscribe 메소드를 사용하여 발생한 이벤트를 구독합니다.

ex)


  let testObservable: Observable<String>



그렇다면 Subject 는 무엇일까요?

쉽게 말해 Observer 와 Observable 을 합한 클래스라고 생각하시면 됩니다.


[Subject]

- ObserverObservable의 기능을 가진 클래스

- 종류로는 AsyncSubject, PublishSubject, BehaviorSubject, ReplaySubject 이렇게 4개가 있습니다.


그렇다면 위에서 말한 Observer ObservableSubject 는 어떻게 사용해야 할까요?


ex)


  let _testSubject = PublishSubject<String>()          // 1

  let testObserver = _testSubject.asObserver()         // 2

  let testObservable = _testSubject.asObservable()     // 3



  testObserver.onNext("이상이 감지되었다!")                 // 4


  testObservable

    .subscribe(onNext: { command in                     // 5

      debugPrint("수신 메세지: \(command)")

    }, onError: {error in                               // 6

        

    })

  .disposed(by: disposeBag)

  

 결과 >> 수신 메세지: 이상이 감지되었다!  


1. testSubject 를 String 타입으로 만든다. (무전기)

2. testSubject의 Observer 객체를 testObserver와 연결한다. (송신 무전기를 준다)

3. testSubject의 Observable 객체를  testObservable과 연결한다. (수신 무전기를 준다)

4. Observer 객체인 testObserver의 onNext 메소드로 "testString" 이라는 문자열 이벤트를 발생시킨다. (송신무전기를 사용하여 "이상이 감지되었다!" 라고 말한다)

5. testObservable 객체의 subscribe 메소드의 인자 클로저를 통하여 observer 가 발상시킨 이벤트를 다룬다. (당직사관이 송신무전기를 통하여 이상이 "감지되었다!" 라고 듣는다.)

6. 혹여나 에러가 발생할 시 해당 클로저에 접근한다.


대충 감이 오시는가요?

Subject와 비슷한 기능을 가진 Variable 이라는 클래스도 있는데, SubjectVariable 에 대한 설명은 생략 하기로 하겠습니다.


이 개념을 토대로 

http://reactivex.io  에서

Observable의 메소드들의 사용법을 익히시고, 

Subject 에서 이벤트의 시작, 완료 시점에 대해 공부하신다면 RxSwfit에 사용하시는데 크게 어려움이 없을 듯 합니다.



'programming > RxSwift' 카테고리의 다른 글

RxSwift를 사용한 MVVM-C 패턴  (1) 2018.10.15
RxSwift를 배우기 전 필요한 개념정리  (1) 2018.08.03
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함