MVVM Refactoring

이재영·2023년 2월 3일
0

what is MVVM?

MVVMModel-View-ViewModel의 약자로, 총 3가지의 그룹으로 이루어진
패턴이다. ViewModelModel의 데이터를 가공해주고
이런 ViewModelView가 보여주는 역할을 한다.

기존에 사용하던 MVC패턴에서 ViewController의 작업이 방대해지면서,
View와 Model을 분리해 코드의 양도 줄고 더 효율적인 방식으로 진행된다.
하지만, 데이터 binding 작업을 해야하며 단순하고 직관적인 MVC와 달리
ViewModel의 설계가 쉽지않다.


기존의 작업했던 것을 MVVM 형태로 리팩토링 해보았다.

과정

우선 viewModel 파일을 생성해주었다. viewModel에서는 데이터(output) 과
user interactions(input)이 존재해야 한다. viewController에 있던 모델 관련 코드들을
viewModel로 넘겨주었고, item들을 viewModel에서 받을 수 있게 해주었다.
viewController에는 view components관련한 것들만 남겨두었다.


viewModel 코드

//
//  FrameworkListViewModel.swift
//  AppleFramework
//
//  Created by 이재영 on 2023/02/02.
//

import Foundation
import Combine

final class FrameworkListViewModel {
    
    init(items: [AppleFramework], selectedItem: AppleFramework? = nil) {
        self.items = CurrentValueSubject(items)
        self.selectedItem = CurrentValueSubject(selectedItem)
    }
    
    // Data => Output
    var items = CurrentValueSubject<[AppleFramework], Never>(AppleFramework.list)
    let selectedItem: CurrentValueSubject<AppleFramework?, Never>
    
    // User Action => Input
    let didSelect = PassthroughSubject<AppleFramework, Never>()
    
    func didSelect(at indexPath: IndexPath) {
        selectedItem.send(item)
    }
}

MVVM 전환의 핵심 : view로 부터 비즈니스 로직을 최대한 분리하는 것




참고 문서 및 유용한 자료
https://scshim.tistory.com/407
https://learn.microsoft.com/ko-kr/xamarin/xamarin-forms/enterprise-application-patterns/mvvm

profile
기록

0개의 댓글