ReactiveX에서는 observable stream이 있는 비동기 프로그래밍 API를 제공합니다. 다시말해, 비동기 프로그래밍입니다.

 

예를 들어, 사용자가 프로그램을 사용할 경우 ViewController 내부의 클래스들이 순서대로 동작하는 것이 아니라,

사용자의 입력인 외부적 요인에 따라 코드의 순서가 다르게 실행될 것입니다.

 

RxSwfit는 ReactiveX를 Swift로 구현한 것입니다.

 

Observable

  • 이벤트에 대한 방출(Emit)을 합니다.
  • subscribe를 하지 못합니다. 따라서 이벤트를 방출할 수만 있습니다. 이벤트에 대한 처리가 불가합니다.

Observer

  • Observable에서 방출된 이벤트를 처리합니다.
  • 전달받은 event를 다른 Observer에게 전달하지 못합니다.

상단에서 언급한 Observable과 Observer를 통해 데이터의 흐름(Stream)을 통제 가능합니다. 이때, Operator를 통해 Stream을 변경, 조작할 수 있습니다.

 

Stream

  • 시간에 따라 값이 달라지는 형태를 의미합니다.

Subsribe

  • Observable에서 방출된 event를 처리하기 위해서 subscribe, 즉 구독을 해야 합니다.
  • Observable을 구독을 하기 전까지는 event가 방출이 되더라도 아무 일도 발생하지 않을 것입니다.

Observable Sequence

  • 유한한 시퀀스와 무한한 시퀀스가 존재합니다.
  • creat 연산자를 통해 Observable을 생성합니다.
  • subscribe가 되었을 때, Observable이 실행됩니다.
  • next를 통해 event를  emit합니다.
    • LifeCycle 중 오류가 발생할 경우 error  이벤트를, 정상적으로 완료가 될 경우 completed를 Notification됩니다.
    • deinit이 되는 시점, 시퀀스가 종료되는 시점에 Dispose가 됩니다.
    • 시퀀스가 종료된 이후에는 더 이상 이벤트가 발생하지 않습니다.
    • Infinite Observable Sequence
      • 무한한 시퀑스입니다. 이벤트 전달에 있어 끝이 존재하지 않습니다.
      • 예를 들어, UI와 관련한 이벤트입니다.
      • 사용자아 무엇을 입력하고, 클릭을 하더라도 반응을 끊임없이 제공해야 합니다.
      • 따라서 사용자의 입력에 대한 화면 전환이 끊임없이 발생합니다.
    • Finite Observable Sequence
      • 유한한 시퀀스입니다. 이벤트 전달에 있어 끝이 존재합니다.
      • 예를 들어, 대용량의 프로그램을 다운받로드받는 경우가 있습니다.
      • 사용자가 파일에 대한 다운을 요청할 경우, 파일을 모두 다운로드를 받게 되면 이벤트에 대한 처리가 종료됩니다.

 

 

https://reactivex.io/documentation/observable.html

 

ReactiveX - Observable

Observable In ReactiveX an observer subscribes to an Observable. Then that observer reacts to whatever item or sequence of items the Observable emits. This pattern facilitates concurrent operations because it does not need to block while waiting for the Ob

reactivex.io

부족한 부분이 많은 글이니 잘못된 정보에 대해 댓글 부탁드립니다!

'iOS' 카테고리의 다른 글

[trouble shooting] XML Data Parse하기! [feat. SWXMLHASE 사용기]  (0) 2024.03.23

안녕하세요, 서서씨입니다!

오늘은 당연을 개발하며 제가 겪얶던 어려움에 대해 공유해 보고자 합니다.

 

우선, 저는 Swift를 학습하며 API 통신을 통해 받아 온 데이터의 형식이 모두 JSON 형식이었습니다.

이러한 경우에, URLSession과 Alamofire등을 사용을 하여 어렵지 않게 데이터에 대한 처리가 가능했습니다.

 

그런데... 제가 사용한 API에서는 데이터를 XML 타입으로 제공을 하고, 별도의 파싱 과정을 통해 데이터 사용이 가능했습니다.

그나저나 파싱은 무엇을 의미할까요?

 

Parsing

구글에 검색해 보았는데요... 그렇다고 합니다. 와닿지가 않으니 구체적으로 무슨 의미인지 더 깊게 알아보도록 하겠습니다.

파싱은 데이터를 특정 패턴이나, 순서로 추출하여 정보로 가공하는 것을 말한다고 해요.

그렇다면 예시를 함께 알아보도록 해요.

 

예시의 XML 파일을 모델로 분리하여 사용하기 위햐서는 XML 데이터를 별도로 Parsing을 하는 과정이 요구됩니다.

이때, 저는 데이터의 Parsing을 위해 오픈 소스 라이브러리인 SWXMLHASH를 사용해 주었습니다.

SWXMLHASH

https://github.com/drmohundro/SWXMLHash

 

GitHub - drmohundro/SWXMLHash: Simple XML parsing in Swift

Simple XML parsing in Swift. Contribute to drmohundro/SWXMLHash development by creating an account on GitHub.

github.com

공식문서에서는 SWXMLHash는 Swift에서 XML을 구문 분석하는 비교적 간단한 방법이라고 소개를 하고 있습니다.

Alamofire를 통해서 통신을 진행합니다. 이때, 성공적인 통신이 이루어질 경우 데이터를 Pasre를 진행하도록 했습니다.

코드의 가독성을 위해 저는 별도의 함수로 로직을 분리해 둔 상태입니다.

데이터를 parse하는 함수의 내부입니다.

XML 데이터를 인자로 전달을 받습니다. 전달받은 Xml 데이터의 boxofs, boxof 접근을 합니다.  즉, 상위의 태그에 접근을 하는 것입니다.

이렇게 요소에 접근을 , 요소 내부의 하위 항목들을 바인딩하여 값을 저장한 , 해당 데이터드를 구조체에 저장해 주는 과정을 거쳐 주어 데이터를 parse 가능합니다.

 

더욱 다양한 방법에 대해 댓글 남겨 주시면 학습 후 업로드 진행해 보도록 하겠습니다!

🤓

'iOS' 카테고리의 다른 글

Observable vs Operator  (0) 2024.03.25

+ Recent posts