6-2 RxSwift

STONE·2024년 11월 26일

Swift_Ios

목록 보기
20/44

주제

RxSwift

Swift에서 Reactive Programming을 구현하기 위한 프레임워크이다. 비동기 데이터 흐름과 이벤트 기반 프로그래밍을 처리할 수 있도록 도와준다

주요 개념

  1. Reactive Programming
    -> 데이터가 변경될 때마다 이를 관찰하고, 반응적으로 처리하는 방식
    -> Observable 또는 Stream이라는 데이터 흐름을 사용하여 이벤트를 처리한다.
  2. Observable
    -> 데이터를 내보내는 스트림입니다. 시간에 따라 발생하는 데이터나 이벤트를 방출합니다.
    -> 예를 들어, 사용자 입력, 네트워크 응답, 타이머 Observable이 될 수 있다.
  3. Observer
    -> Observable에서 방출되는 데이터를 구독하여 처리하는 역할을 한다
  4. Operators
    -> Observable데이터를 변환하거나 필터링하는 데 사용된다
    -> map, filter, flatMap, merge, combineLatest
  5. Subjects
    -> 이벤트를 수동으로 방출하거나 관찰할 수 있는 특별한 Observable입니다.
    -> 주로 외부 이벤트를 처리할 때 사용됩니다.
    -> 종류: PublishSubject, BehaviorSubject, `ReplaySubject, AsyncSubject.

주요 구성 요소

  1. RxSwift
    -> 핵심 라이브러리. Observable 및 기본적인 기능을 제공합니다.
  2. RxCocoa
    -> iOS 앱 개발을 위한 UIKit, Cocoa 기반 확장 라이브러리.
    -> 예를 들어, 버튼 탭 이벤트, 텍스트 필드 입력 등 UIKit 요소를 쉽게 다룰 수 있습니다.
  3. Disposable
    -> Observable의 작업을 취소하거나 리소스를 정리하는 역할.
  4. Schedulers
    -> RxSwift에서 작업이 실행되는 쓰레드를 관리합니다.
    -> 예: 메인 쓰레드(UI 작업), 백그라운드 쓰레드(비동기 작업).

예제

// hello RxSwift
import RxSwift

let disposeBag = DisposeBag()

Observable.just("Hello, RxSwift!")
    .subscribe(onNext: { value in
        print(value)
    })
    .disposed(by: disposeBag)
    
// UI 바인딩
import RxSwift
import RxCocoa

class ViewController: UIViewController {
    let disposeBag = DisposeBag()
    let textField = UITextField()
    let label = UILabel()

    override func viewDidLoad() {
        super.viewDidLoad()

        textField.rx.text.orEmpty
            .bind(to: label.rx.text)
            .disposed(by: disposeBag)
    }
}

// Operators 활용
let numbers = Observable.of(1, 2, 3, 4, 5)

numbers
    .map { $0 * 2 } // 각 숫자를 2배로 변환
    .filter { $0 > 5 } // 5보다 큰 값만 통과
    .subscribe(onNext: { print($0) })
    .disposed(by: disposeBag)

RxSwift의 장점

  1. 비동기 작업 관리
    -> 네트워크 호출, 타이머, 사용자 입력 등 비동기 작업을 간단하게 처리.
  2. 코드 가독성 향상
    -> Observable과 Operators를 사용하면 데이터 흐름을 직관적으로 표현 가능.
  3. UIKit 요소와의 쉬운 연동
    -> RxCocoa를 통해 버튼, 텍스트 필드, 테이블 뷰 등의 이벤트를 쉽게 처리.
  4. 확장성과 재사용성
    -> 모듈화된 비동기 로직을 작성하여 다른 곳에서 재사용 가능.

RxSwift의 단점

  1. 러닝 커브
    -> RxSwift와 Reactive Programming 개념을 이해하는 데 시간이 걸릴 수 있음.
  2. 디버깅
    -> 데이터 흐름이 복잡해질수록 디버깅이 어려워질 수 있음.
  3. 리소스 관리
    -> Disposable을 잘 관리하지 않으면 메모리 누수가 발생할 수 있음.

정리

RxSwift를 사용하여 비동기 처리와 이벤트 기반 프로그래밍을 간결하고 효율적으로 구현할 수 있고 UI와의 연동이나 복잡한 데이터 흐름 처리에 특히 유용하다

profile
흠...?

0개의 댓글