[swift] RxSwift를 사용한 로그인 처리 방법

개요

이 블로그 포스트에서는 RxSwift를 이용하여 로그인 처리를 하는 방법에 대해 알아보겠습니다.

RxSwift란?

RxSwift는 Swift 형식의 ReactiveX입니다. ReactiveX는 비동기 이벤트들을 쉽게 관리하고 조합하기 위한 라이브러리입니다.

로그인 처리하기

  1. 먼저, RxSwift를 프로젝트에 추가해야 합니다. 프로젝트의 Podfile에 아래와 같이 추가합니다.
pod 'RxSwift'
  1. Terminal을 열고 프로젝트 루트 디렉토리로 이동한 다음 pod install명령어를 실행합니다.

  2. 로그인 화면의 ViewModel을 만듭니다. 이 ViewModel은 사용자가 입력한 아이디와 비밀번호를 저장하고, 로그인 이벤트를 처리하는 역할을 합니다. 아래는 예시입니다.

import Foundation
import RxSwift
import RxCocoa

class LoginViewModel {
    let username = BehaviorRelay<String>(value: "")
    let password = BehaviorRelay<String>(value: "")
    let loginEnabled = BehaviorSubject<Bool>(value: false)

    func login() {
        // 로그인 처리 로직 작성
    }
}
  1. ViewController에서 LoginViewModel을 사용합니다. 아래는 ViewController 내의 로그인 버튼을 ViewModel과 연결하는 예시입니다.
import Foundation
import RxSwift
import RxCocoa

class LoginViewController: UIViewController {
    let disposeBag = DisposeBag()
    let viewModel = LoginViewModel()

    @IBOutlet weak var usernameTextField: UITextField!
    @IBOutlet weak var passwordTextField: UITextField!
    @IBOutlet weak var loginButton: UIButton!

    override func viewDidLoad() {
        super.viewDidLoad()

        // 사용자가 입력한 아이디와 비밀번호를 ViewModel과 바인딩
        usernameTextField.rx.text.orEmpty
            .bind(to: viewModel.username)
            .disposed(by: disposeBag)
        
        passwordTextField.rx.text.orEmpty
            .bind(to: viewModel.password)
            .disposed(by: disposeBag)

        // ViewModel의 loginEnabled 속성을 이용하여 로그인 버튼 활성화/비활성화
        viewModel.loginEnabled
            .bind(to: loginButton.rx.isEnabled)
            .disposed(by: disposeBag)

        // 로그인 버튼의 탭 이벤트를 ViewModel의 login 메소드와 바인딩
        loginButton.rx.tap
            .subscribe(onNext: { [weak self] in
                self?.viewModel.login()
            })
            .disposed(by: disposeBag)
    }
}

로그인 버튼을 탭할 때 ViewModel의 login 메소드가 호출되며, 로그인 처리 로직을 구현할 수 있습니다.

  1. 나머지 로그인 처리 로직은 ViewModel의 login 메소드에서 구현합니다. 이 예제에서는 간단히 콘솔에 로그인 성공 메시지를 출력하는 것으로 작성해보겠습니다.
func login() {
    if username.value == "admin" && password.value == "password" {
        print("로그인에 성공했습니다.")
    } else {
        print("아이디 또는 비밀번호가 잘못되었습니다.")
    }
}

마무리

이번 블로그 포스트에서는 RxSwift를 사용하여 로그인 처리를 하는 방법에 대해 알아보았습니다. RxSwift를 사용하면 비동기 이벤트들을 효율적으로 관리하고 조합할 수 있으므로, 복잡한 비동기 처리를 간단하게 구현할 수 있습니다. RxSwift의 다양한 연산자와 기능을 활용하여 로그인 처리 외에도 다양한 기능을 처리할 수 있다는 것을 알아두시길 바랍니다.

참고 자료