[swift] RxSwift에서의 쇼핑 카트 처리 방법

RxSwift는 Reactive Extensions를 활용하여 iOS 애플리케이션에서 반응형 프로그래밍을 구현하는 도구입니다. 이 문서에서는 RxSwift를 사용하여 쇼핑 카트를 처리하는 방법을 알아보겠습니다.

쇼핑 카트 모델 만들기

먼저, 쇼핑 카트를 나타내는 모델을 만들어야 합니다. 아래와 같이 CartItem이라는 구조체를 정의할 수 있습니다.

struct CartItem {
    let id: Int
    let name: String
    let price: Int
}

위의 코드에서 CartItem은 카트에 담기는 개별 아이템을 나타내는 구조체입니다. 각 아이템은 고유한 id, name, price 속성을 가지고 있습니다.

쇼핑 카트 관리하기

다음으로, 쇼핑 카트를 관리하는 클래스를 만들어 보겠습니다. 아래와 같이 CartManager라는 클래스를 만들 수 있습니다.

import RxSwift

class CartManager {
    var cartItems = BehaviorSubject<[CartItem]>(value: [])
    
    func addToCart(item: CartItem) {
        var currentItems = try! cartItems.value()
        currentItems.append(item)
        cartItems.onNext(currentItems)
    }
    
    func removeFromCart(item: CartItem) {
        var currentItems = try! cartItems.value()
        if let index = currentItems.firstIndex(where: { $0.id == item.id }) {
            currentItems.remove(at: index)
            cartItems.onNext(currentItems)
        }
    }
    
    func getCartItems() -> Observable<[CartItem]> {
        return cartItems.asObservable()
    }
}

위의 코드에서 CartManager 클래스는 addToCart(item:) 메서드로 쇼핑 카트에 아이템을 추가하고, removeFromCart(item:) 메서드로 아이템을 제거합니다. 또한, getCartItems() 메서드는 현재 카트에 담긴 아이템들을 Observable로 반환하여 관찰할 수 있도록 합니다.

쇼핑 카트 사용하기

이제 위에서 정의한 CartManager 클래스를 사용하여 쇼핑 카트를 조작할 수 있습니다. 예를 들어, 아래와 같이 쇼핑 카트에 아이템을 추가하고 제거할 수 있습니다.

let cartManager = CartManager()

// 카트에 아이템 추가
let newItem = CartItem(id: 1, name: "iPhone", price: 1000)
cartManager.addToCart(item: newItem)

// 카트에서 아이템 제거
cartManager.removeFromCart(item: newItem)

// 카트 아이템 관찰
cartManager.getCartItems()
    .subscribe(onNext: { items in
        print(items)
    })
    .disposed(by: disposeBag)

위의 코드에서는 cartManager 인스턴스를 생성한 뒤, addToCart(item:) 메서드로 쇼핑 카트에 아이템을 추가하고, removeFromCart(item:) 메서드로 아이템을 제거합니다. 마지막으로, getCartItems() 메서드를 사용하여 현재 카트에 담긴 아이템들을 관찰합니다.

위의 코드를 실행하면, 쇼핑 카트에 아이템이 추가되거나 제거될 때마다 관찰 중인 아이템들의 리스트가 출력됩니다.

결론

RxSwift를 사용하여 쇼핑 카트를 처리하는 방법에 대해 알아보았습니다. 쇼핑 카트에 아이템을 추가하고 제거하는 메서드를 정의하고, 현재 카트에 담긴 아이템들을 Observable로 관찰할 수 있도록 구현했습니다. 이를 활용하여 iOS 애플리케이션에서 쇼핑 카트를 쉽게 관리할 수 있습니다.

참고 자료