[RxSwift] RxSwift를 왜 쓰는걸까? 효율적인 비동기

2024. 12. 20. 17:02·iOS/RxSwift
728x90
반응형

안녕하세요, iOS 개발하는 루피입니다.

 

오늘은 RxSwift의 비동기 작업에 대해 깊이 파헤쳐 보려 합니다. 지난 시간에는 데이터 바인딩을 통해 RxSwift의 기본 개념을 알아봤다면, 이번에는 RxSwift를 사용하는 이유를 좀 더 자세히 탐구해 보겠습니다! 


Observable을 통한 비동기 이벤트 스트림 관리

RxSwift에서 Observable은 비동기 작업은 핵심입니다. Observable은 시간을 기준으로 발생하는 데이터를 스트림 형태로 처리하는데요. 네트워크 요청, UI 이벤트, 타이머 등 다양한 비동기 작업을 Observable로 감싸서 처리할 수 있습니다. 비동기 이벤트가 발생할 때마다 구독한 Observer가 그 이벤트를 받아 처리하게 됩니다. 정말 직관적이지 않나요?

 

예를 들어, 네트워크 요청을 할 때:

let ob = Observable.just("KimsangjunZZang!")
ob.subscribe(onNext: { value in
    print(value)
})

이 코드는 문자열을 Observable로 감싸서 구독하고, 값이 발생할 때마다 이를 출력합니다. 간단하죠?


추상화된 비동기 처리

RxSwift는 비동기 작업을 추상화해서 처리할 수 있도록 도와줍니다. 네트워크 요청, 파일 읽기, 사용자 입력, 타이머 등 다양한 비동기 작업을 모두 Observable로 다룰 수 있어요. Callback, Completion Handler, Delegate 등을 사용할 필요 없이, 모든 작업을 Observable로 통합하여 간결하게 처리할 수 있습니다. 이게 바로 RxSwift의 진짜 매력 중 하나로 보이는 군용 ㅇㅇ.

 

예를 들어, 네트워크 요청을 Observable로 감싸는 경우:

func fetchData() -> Observable<Data> {
    return Observable.create { observer in
        let task = URLSession.shared.dataTask(with: url) { data, response, error in
            if let error = error {
                observer.onError(error)
            } else if let data = data {
                observer.onNext(data)
                observer.onCompleted()
            }
        }
        task.resume()
        return Disposables.create {
            task.cancel()
        }
    }
}

이 패턴을 통해 비동기 작업을 일관되게 관리할 수 있습니다. 정말 편리하죠?


선언적 코드

SwiftUI의 선언적 코드 스타일에 익숙한 분들이 요즘은 꽤 많을 거 같습니다. RxSwift에서도 선언적 코드 스타일이 사용 가능합니다.

RxSwift는 우리가 어떤 일이 일어날지 선언하면, 그 일이 발생할 때 자동으로 적절한 작업이 실행되도록 할 수 있어요.

 

예를 들어, 여러 네트워크 요청을 동시에 실행하고, 결과를 결합하는 작업을 이렇게 간단하게 표현할 수 있습니다:

Observable.zip(apiCall1(), apiCall2())
    .subscribe(onNext: { result1, result2 in
        print("Both requests completed: \(result1), \(result2)")
    })

이 코드는 두 개의 네트워크 요청을 동시에 처리하고, 두 요청이 모두 완료되면 그 결과를 결합하여 출력합니다. 


스레드 관리의 간편함

비동기 작업을 하다 보면 스레드 문제를 종종 겪게 됩니다. ㅠㅠ RxSwift는 스레드 관리도 쉽게 처리할 수 있게 도와줍니다. 비동기 작업을 백그라운드 스레드에서 처리하고, 결과를 메인 스레드에서 UI에 반영하는 패턴을 RxSwift의 Schedulers를 통해 간단히 구현가능 합니다.

fetchData()
    .subscribeOn(ConcurrentDispatchQueueScheduler(qos: .background))
    .observeOn(MainScheduler.instance)
    .subscribe(onNext: { data in
        // UI 업데이트는 메인 스레드에서
        self.updateUI(with: data)
    })

부족한 부분이나 궁금한 점이 있으면 언제든지 피드백 주세요. 함께 공부하며 더 나은 개발자가 되어 보겠습니다

728x90
반응형

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

[RxSwift] Create / Defer  (0) 2024.12.20
[RxSwift] Map / FlatMap  (0) 2024.12.20
[RxSwift] Subject  (0) 2024.12.20
[RxSwift] Observable  (0) 2024.12.20
[RxSwift] RxSwift를 왜 쓰는걸까? 데이터 바인딩  (0) 2024.12.20
'iOS/RxSwift' 카테고리의 다른 글
  • [RxSwift] Map / FlatMap
  • [RxSwift] Subject
  • [RxSwift] Observable
  • [RxSwift] RxSwift를 왜 쓰는걸까? 데이터 바인딩
kimsangjunzzang
kimsangjunzzang
루피 님의 블로그 입니다.
  • kimsangjunzzang
    루피 님의 블로그
    kimsangjunzzang
  • 전체
    오늘
    어제
    • 분류 전체보기 (104) N
      • iOS (63)
        • Swift (34)
        • UIKit (9)
        • SwiftUI (8)
        • RxSwift (12)
      • FE (8)
        • 모던 자바스크립트 (3)
        • HTML (5)
      • Operating System (1)
      • 트러블 슈팅 (5) N
      • 바로 안 나오면 모르는거다 (4)
      • Algorithm (20) N
      • 회고록 (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    web
    swift
    백준
    arc
    ViewController
    프로그래머스
    rxswift
    HTML
    boj
    알고리즘
    uikit
    AppleDeveloperAcademy
    Algorithm
    ios
    C++
    state
    Concurrency
    디자인 패턴
    SwiftUI
    task
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
kimsangjunzzang
[RxSwift] RxSwift를 왜 쓰는걸까? 효율적인 비동기
상단으로

티스토리툴바