[swift] RxSwift를 사용한 영화 예매 처리 방법

이번 포스팅에서는 RxSwift를 활용하여 영화 예매 처리를 간단하게 구현하는 방법에 대해 알아보겠습니다.

준비물

  1. Xcode
  2. RxSwift 라이브러리

1. 프로젝트 세팅

먼저, Xcode에서 새로운 프로젝트를 생성합니다. 프로젝트가 생성되면, Podfile을 열어 RxSwift 라이브러리를 추가합니다. 아래와 같이 Podfile에 RxSwift 라이브러리를 추가합니다.

pod 'RxSwift', '~> 6.0'
pod 'RxCocoa', '~> 6.0'

그리고 터미널을 열어 아래 명령어를 실행하여 라이브러리를 설치합니다.

$ pod install

2. 예매 처리 구현

영화 예매 처리를 위해 ViewController를 생성하고, 필요한 UI 요소들을 추가합니다. 예를 들어, 영화 제목을 입력하는 TextField와 예매 버튼이 있다고 가정합니다.

import UIKit
import RxSwift
import RxCocoa

class ViewController: UIViewController {

    @IBOutlet weak var movieTitleTextField: UITextField!
    @IBOutlet weak var bookButton: UIButton!

    private let disposeBag = DisposeBag()

    override func viewDidLoad() {
        super.viewDidLoad()

        // 예매 버튼의 isEnabled 속성을 영화 제목 TextField의 입력 상태에 따라 제어합니다.
        movieTitleTextField.rx.text
            .map { $0?.isEmpty == false }
            .bind(to: bookButton.rx.isEnabled)
            .disposed(by: disposeBag)

        // 예매 버튼의 Tap 이벤트를 처리합니다.
        bookButton.rx.tap
            .subscribe(onNext: { [weak self] in
                self?.bookMovie()
            })
            .disposed(by: disposeBag)
    }

    private func bookMovie() {
        // 예매 처리 로직을 구현합니다.
        let movieTitle = movieTitleTextField.text ?? ""
        print("영화 예매 완료 - \(movieTitle)")
    }
}

위의 코드에서 rx.text는 TextField의 텍스트를 이벤트 스트림으로 변환하는 RxSwift의 연산자입니다. rx.tap은 Button의 탭 이벤트를 처리하는 연산자입니다.

3. 실행 및 테스트

이제 프로젝트를 실행하고 영화 제목을 입력한 후 예매 버튼을 눌러보세요. 영화 제목이 입력되지 않으면 예매 버튼이 비활성화되어 있고, 입력이 완료되면 버튼이 활성화됩니다. 버튼을 누르면 콘솔에 예매 완료 메시지가 출력됩니다.

결론

RxSwift를 사용하면 영화 예매 처리와 같은 비동기 작업을 보다 간단하게 구현할 수 있습니다. RxSwift는 반응형 프로그래밍의 개념을 적용하여 앱의 복잡성을 줄이고 가독성을 향상시킬 수 있는 강력한 도구입니다. 다양한 연산자를 활용하여 비동기 작업을 체인으로 연결하면서 코드를 더욱 간결하고 유지보수하기 쉽게 만들 수 있습니다.