-
[MVVM패턴 적용 후기 - 1차 해외주식예약주문 리팩토링]취준(자소서,면접)/프로젝트 정리 2024. 7. 30. 11:10
요약: 이건 Objective-C의 Massive ViewController를 MVVM으로 변환한 케이스다.
하지만 Objc만으로는 완벽한MVVM을 구현하기 어려움. 왜냐면 즉각 감지가 안됨.
** 현재는 KVO를 쓰지 않고 property 변수에 직접 새로 할당, 가져오는 구조 (직접 접근/간접접근 중 직접접근 방식임)
completion 블록으로 값이 모두 할당이 되었다는 시그널을 받으면, view에 셋팅하고 있음
-> 이러한 과정에 있어서 상태값을 결국 동기화해주는 문제에 직면하게 된다. Action이 일어날 때마다 이를 일일히 업데이트해주기 보다는 묶어서 서로 업데이트하도록 해두면 편하지 않을까? 이러한 점에서 Objective C 의 KVO가 등장.
1. ObjectiveC의 데이터 바인딩
- Objective-C로 MVVM을 구현할 때는 데이터 바인딩을 수동으로 처리해야 합니다. KVO(Key-Value Observing)와 같은 방법을 사용하여 뷰와 뷰 모델 간의 변경 사항을 관찰합니다.
- 코드가 비교적 장황하며, 변경 사항을 반영하는 데 더 많은 코드가 필요합니다.// ViewModel.h @interface ViewModel : NSObject @property (nonatomic, strong) NSString *text; @end // ViewController.m [self.viewModel addObserver:self forKeyPath:@"text" options:NSKeyValueObservingOptionNew context:nil]; - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { if ([keyPath isEqualToString:@"text"]) { self.label.text = self.viewModel.text; } }
>>> 데이터스트림을 지원하는 반응형프로그래밍의 필요성을 느낌
2. RxSwif를 사용한 데이터 바인딩
- RxSwift를 사용하면 데이터 바인딩이 매우 간단해집니다. Observable과 Observer를 사용하여 뷰와 뷰 모델 간의 데이터 변경 사항을 자동으로 반영할 수 있습니다.
- 코드가 간결하고 이해하기 쉬우며, 반응형 데이터 바인딩이 자연스럽게 이루어집니다.
// ViewModel.swift class ViewModel { let text = BehaviorRelay<String>(value: "") } // ViewController.swift viewModel.text.asObservable() .bind(to: label.rx.text) .disposed(by: disposeBag)
RxSwift는 데이터 바인딩을 간단하게 만들며, 자동으로 UI와 데이터의 동기화를 처리합니다. Objective-C에서는 KVO와 같은 수작업 코드가 필요합니다.
Objective-C로 MVVM을 구현하는 것은 가능하지만, RxSwift를 사용했을 때 얻을 수 있는 간결함과 강력함을 기대하기는 어렵다는 판단하에 차후 신규화면 개발 시 RxSwift를 도입하기로 결정
====================================================================================
'취준(자소서,면접) > 프로젝트 정리' 카테고리의 다른 글
[디자인패턴 변환 코드 리팩토링 - 최종 선택 패턴과 그 이유] (1) 2024.09.16 [디자인패턴 변환 코드 리팩토링- 클린아키텍쳐가 필요한 이유] (0) 2024.08.19 [디자인패턴 변환 코드 리팩토링 - 도입배경 및 고민사항들] (0) 2024.07.31 [RIBs아키텍쳐를 사용한 코드 리팩토링 - 개념정리(1)] (0) 2024.07.30 [MVVM패턴 적용 후기 - 2차 RxSwift를 사용한 신규화면 개발] (0) 2024.07.30