[swift] RxCocoa를 활용한 금융 앱 구현 방법

금융 앱을 구현하기 위해서는 사용자들이 실시간으로 금융 데이터를 확인하고 갱신할 수 있는 기능이 필요합니다. 이러한 기능을 구현하기 위해 RxSwift와 RxCocoa라는 라이브러리를 사용할 수 있습니다. 이번 글에서는 RxCocoa를 활용하여 실시간 금융 데이터를 가져와 화면에 표시하는 예제를 소개하겠습니다.

1. RxCocoa 설치 및 설정

먼저, RxCocoa를 사용하기 위해서는 프로젝트에 해당 라이브러리를 설치해야 합니다.

Podfile에 다음과 같이 RxCocoa를 추가합니다.

pod 'RxCocoa'

설치가 완료되면, Xcode에서 프로젝트를 빌드해주어야 합니다.

2. API 통신

금융 데이터를 가져오기 위해 API를 사용해야 합니다. 예를 들어, Alpha Vantage API를 이용하여 실시간 주식 데이터를 가져오는 방법을 살펴보겠습니다.

먼저, URLSession을 사용하여 API를 호출하는 함수를 작성합니다.

import RxSwift

func fetchStockData(symbol: String) -> Observable<StockData> {
    return Observable.create { observer in
        let url = URL(string: "https://www.alphavantage.co/query?function=TIME_SERIES_INTRADAY&symbol=\(symbol)&interval=1min&apikey=YOUR_API_KEY")!
        
        let task = URLSession.shared.dataTask(with: url) { (data, response, error) in
            if let error = error {
                observer.onError(error)
                return
            }
            
            guard let data = data else {
                observer.onError(NSError(domain: "Data is nil", code: 0, userInfo: nil))
                return
            }
            
            do {
                let decoder = JSONDecoder()
                let stockData = try decoder.decode(StockData.self, from: data)
                observer.onNext(stockData)
                observer.onCompleted()
            } catch {
                observer.onError(error)
            }
        }
        
        task.resume()
        
        return Disposables.create {
            task.cancel()
        }
    }
}

위의 코드에서 StockData는 API로부터 받아오는 주식 데이터의 모델입니다. YOUR_API_KEY에는 Alpha Vantage API로부터 받은 개인 키를 사용해야 합니다.

3. UI 구성

데이터를 받아와서 화면에 표시하기 위해 UI를 구성해야 합니다. 예를 들어, 주식 가격을 표시하는 Label을 만들어보겠습니다.

import RxCocoa
import RxSwift

class StockViewController: UIViewController {
    @IBOutlet weak var priceLabel: UILabel!
    let disposeBag = DisposeBag()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // API 통신 예제에서 작성한 fetchStockData 함수를 호출하여 데이터를 가져옵니다.
        fetchStockData(symbol: "AAPL")
            .map { $0.price }
            .bind(to: priceLabel.rx.text)
            .disposed(by: disposeBag)
    }
}

위의 코드에서 priceLabel이라는 Label을 사용하여 주식 가격을 표시하고 있습니다. fetchStockData 함수로부터 받아온 데이터 중에서 price를 가져와 priceLabel.rx.text에 바인딩하고 있습니다.

4. 실행 및 확인

이제 앱을 실행하여 실시간 주식 가격을 확인할 수 있습니다. StockViewController를 띄우고, API로부터 가져온 데이터가 Label에 표시되는지 확인해보세요.

이와 같은 방법으로 RxCocoa를 활용하여 금융 앱을 구현할 수 있습니다.

참고자료