안녕하세요, iOS 개발하는 루피입니다
오늘은 RxSwift를 본격적으로 공부하기 전에 “왜 RxSwift를 써야 할까?”라는 고민의 답을 하나씩 찾아보려고 합니다.기존 코드로도 충분히 해결할 수 있는 것 같은데, RxSwift를 도입하면 과연 어떤 점이 달라질까요? 바로 데이터 바인딩입니다! 데이터를 UI에 반영하는 과정에서 자주 발생하는 boilerplate 코드의 문제를 해결할 수 있죠.
기존 코드의 문제점
기존에는 데이터와 UI의 동기화를 수동으로 처리해야 했습니다. 예를 들어, 테이블 뷰가 변경될 때마다 reloadTable()을 호출해야 하죠. 이런 반복적인 작업이 많아질수록 코드 양이 많아지고, 실수할 가능성도 커집니다. 유지 보수도 어려워지 것이라고 예상이 되네용.
RxSwift의 해결책
RxSwift를 사용하면 데이터와 UI의 연결이 훨씬 간편해집니다. 자동으로 UI가 업데이트되도록 할 수 있죠. 이를 통해 코드의 복잡성을 줄이고, 일관성을 유지할 수 있습니다. 물론, 무분별한 데이터 바인딩은 성능을 저하시킬 수 있으니 주의가 필요함이 예상이 되네요.
RxSwift 코드 예제
그럼 RxSwift를 사용한 코드 예제를 살펴 볼게요. 사용자 프로필 정보를 업데이트하고 UI에 반영하는 기능을 구현해보겠습니다!!.
Model
import Foundation
import RxSwift
import RxCocoa
class UserProfile {
var name: BehaviorRelay<String>
var age: BehaviorRelay<Int>
init(name: String, age: Int) {
self.name = BehaviorRelay(value: name)
self.age = BehaviorRelay(value: age)
}
func updateProfile(name: String, age: Int) {
self.name.accept(name)
self.age.accept(age)
}
}
View Controller
import UIKit
import RxSwift
import RxCocoa
class UserProfileViewController: UIViewController {
private let disposeBag = DisposeBag()
private let userProfile = UserProfile(name: "Kim SangJun", age: 27)
@IBOutlet weak var nameLabel: UILabel!
@IBOutlet weak var ageLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
// 바인딩 작업
userProfile.name
.bind(to: nameLabel.rx.text)
.disposed(by: disposeBag)
userProfile.age
.map { "\($0)" }
.bind(to: ageLabel.rx.text)
.disposed(by: disposeBag)
updateProfileButtonTapped()
}
func updateProfileButtonTapped() {
userProfile.updateProfile(name: "Luffy", age: 27)
}
}
RxSwift를 사용하면 데이터와 UI 사이의 연결을 매우 간편하게 관리할 수 있습니다. BehaviorRelay와 bind(to:)를 활용하여 모델의 변경 사항을 UI에 자동으로 반영할 수 있죠. 이 방법은 boilerplate 코드를 줄이고 코드 유지보수성을 높이는 데 큰 도움이 됩니다.
이러한 이유 외에도 RxSwift를 사용하는 여러 가지 장점이 있지만, 오늘은 데이터 바인딩과 관련된 부분에 집중해 보았습니다. 앞으로도 차근차근 다양한 기능들을 정리해 가겠습니다. 부족한 부분이나 추가로 알아야 할 내용이 있다면 언제든지 피드백 주시면 감사하겠습니다!!
'iOS > RxSwift' 카테고리의 다른 글
[RxSwift] Create / Defer (0) | 2024.12.20 |
---|---|
[RxSwift] Map / FlatMap (0) | 2024.12.20 |
[RxSwift] Subject (0) | 2024.12.20 |
[RxSwift] Observable (0) | 2024.12.20 |
[RxSwift] RxSwift를 왜 쓰는걸까? 효율적인 비동기 (0) | 2024.12.20 |