[RxSwift] RxSwift를 왜 쓰는걸까? 데이터 바인딩

2024. 12. 20. 16:52·iOS/RxSwift
728x90
반응형

안녕하세요, 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를 사용하는 여러 가지 장점이 있지만, 오늘은 데이터 바인딩과 관련된 부분에 집중해 보았습니다. 앞으로도 차근차근 다양한 기능들을 정리해 가겠습니다. 부족한 부분이나 추가로 알아야 할 내용이 있다면 언제든지 피드백 주시면 감사하겠습니다!!

728x90
반응형

'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
'iOS/RxSwift' 카테고리의 다른 글
  • [RxSwift] Map / FlatMap
  • [RxSwift] Subject
  • [RxSwift] Observable
  • [RxSwift] RxSwift를 왜 쓰는걸까? 효율적인 비동기
kimsangjunzzang
kimsangjunzzang
루피 님의 블로그 입니다.
  • kimsangjunzzang
    루피 님의 블로그
    kimsangjunzzang
  • 전체
    오늘
    어제
    • 분류 전체보기 (91)
      • iOS (55)
        • Swift (26)
        • UIKit (9)
        • SwiftUI (8)
        • RxSwift (12)
      • FE (8)
        • 모던 자바스크립트 (3)
        • HTML (5)
      • Operating System (1)
      • 트러블 슈팅 (4)
      • 바로 안 나오면 모르는거다 (4)
      • Algorithm (16)
      • 회고록 (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    ios
    CS
    boj
    백준
    life cycle
    주니어 개발자
    uikit
    swift
    ViewController
    state
    알고리즘
    C++
    면접
    티스토리챌린지
    오블완
    web
    DispatchQueue
    SwiftUI
    rxswift
    arc
    디자인 패턴
    AppleDeveloperAcademy
    FP
    Algorithm
    gcd
    JavaScript
    Delegate
    HTML
    closure
    회고록
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
kimsangjunzzang
[RxSwift] RxSwift를 왜 쓰는걸까? 데이터 바인딩
상단으로

티스토리툴바