[TIL] 2021.05.28

승아·2021년 5월 28일
0

👩🏻‍💻 오늘 공부한 내용

Subject ( 참고 사이트 )

  • Observable + Observer = Subject
  • 주제는 옵저버이기 때문에 하나 이상의 Observable을 구독할 수 있으며 동시에 Observable이기도 하기 때문에 항목들을 하나 하나 거치면서 재배출하고 관찰하며 새로운 항목들을 배출할 수도 있다.
  • 이벤트를 외부에 전달해줄 경우 사용해서 Delegate 대신 사용하기도 함.
  • Observable은 unicast, Subject는 multicast이기 때문에 Observable은 독자적인 실행, Subject는 연속적인(?) 실행.

Relay와 차이점

  • Subject와 달리 .completed, .error를 발생하지 않음.
  • Dispose되기 전까지 계속 작동.
  • UIEvent에서 사용하기 적절하다.

Map vs FlatMap ( 참고 사이트 )

Map

  • 연산 값을 리턴시켜줘야 함

FlatMap

  • Observable을 리턴시켜줘야 함

Observable을 통해 받아 온 값을 다른 Obsevable에게 넘겨줘야 될 때

  • FlatMap을 모르고 Map을 사용했을 때
loadTM(lat: lat, lng: lng)
    .map{ tm in
            self.loadStation(tmX: tm.tmX, tmY: tm.tmY)
                .map{ station in
                    self.loadFineDust(stationName: station)
                        .bind(to: self.observable)
                }
                .subscribe()
    }
    .subscribe()

각각 Observable마다 subscribe을 따로 해줘야 됨. 누가봐도 코드가 복잡하고 잘못됐음..ㅋ

  • FlatMap 사용.
loadTM(lat: lat, lng: lng)
    .flatMap{ tm in self.loadStation(tmX: tm.tmX, tmY: tm.tmY)}
    .flatMap{ station in self.loadFineDust(stationName: station)}
    .bind(to: self.observable)

FlatMap을 사용해 더 간단한 코드 완성 !

0개의 댓글