Skip to content

Latest commit

 

History

History
45 lines (32 loc) · 4.85 KB

MVVM 사용이유.md

File metadata and controls

45 lines (32 loc) · 4.85 KB

MVVM


스크린샷 2023-10-12 오전 8 24 29

MVVM 패턴

MVVM (Model-View-ViewModel) 패턴은 뷰와 비즈니스 로직을 더 세분화하여 분리하는 확장된 아키텍처 패턴입니다.

  • Model: 데이터와 데이터 처리를 담당하는 부분으로, MVC 패턴과 동일한 역할을 합니다.
  • View: 사용자 인터페이스를 표시하며, ViewModel의 데이터를 바인딩하여 표시합니다. 이 패턴에서는 컨트롤러 대신 ViewModel이 상호작용을 처리합니다.
  • ViewModel: View와 Model 사이의 중개자 역할을 하며, View에 필요한 데이터를 가공하거나 가공되지 않은 데이터를 Model에 전달합니다. 또한 View와의 양방향 데이터 바인딩을 지원하여 View의 상태를 업데이트하고 사용자 입력을 처리합니다.

MVVM 패턴은 데이터와 UI를 분리하여 테스트 용이성과 재사용성을 높이며, 뷰 로직과 비즈니스 로직을 분리함으로써 코드의 가독성을 증가시킵니다. 또한 데이터 바인딩을 통해 UI 업데이트를 간소화하고 뷰의 로직을 효과적으로 분리할 수 있습니다.

MVC의 불편함

  • Massive View Controller: MVC 패턴에서 뷰 컨트롤러는 많은 역할을 수행하게 되어 "Massive View Controller" 문제가 발생합니다. 이는 사용자 인터페이스 로직, 데이터 변환, 네트워크 요청 처리 등을 모두 처리해야 하기 때문에 코드가 길고 복잡해질 수 있습니다.
  • 강한 의존성과 결합도: MVC 패턴에서 뷰, 모델, 컨트롤러가 강하게 연결되어 있어 유연성과 재사용성이 감소할 수 있습니다.
  • 테스트 어려움: MVC 패턴에서는 뷰와 모델이 강하게 결합되어 있어 단위 테스트를 수행하기 어려울 수 있으며, 뷕 컨트롤러가 많은 로직을 포함하면 테스트 작성과 유지보수가 어려워질 수 있습니다.
  • 코드 분산: 코드의 로직이 뷰 컨트롤러, 모델 및 뷰 사이에 분산되어 있을 수 있으며, 이로 인해 코드를 이해하고 유지보수하기 어려울 수 있습니다.
  • 코드 중복: 뷰 컨트롤러 내에서 비슷한 코드가 여러 번 반복될 수 있으며, 이로 인해 코드의 중복이 발생하고 변경하기 어렵게 될 수 있습니다.

MVC의 장점

  • 간단하고 직관적: MVC 패턴은 간단하고 직관적인 구조를 가지고 있어 빠르게 개발할 수 있습니다.
  • 프레임워크 호환성: iOS와 macOS에서 Apple의 프레임워크는 주로 MVC 패턴을 기반으로 설계되어 있어, 프레임워크와 자연스럽게 호환되며 개발할 수 있습니다.

Swift 관점에서 MVVM 패턴의 장단점

장점

  • 코드 분리: MVVM 패턴은 뷰 로직과 비즈니스 로직을 분리하여 유지보수성을 향상시킵니다. 뷕 컨트롤러에서 비즈니스 로직을 처리하는 대신, 뷰 모델에서 이를 처리하여 코드를 모듈화하고 가독성을 높일 수 있습니다.
  • 테스트 용이성: 뷰 모델은 비즈니스 로직을 포함하므로 단위 테스트를 수행하기 훨씬 용이하며, 뷕 컨트롤러보다 더 작은 단위로 테스트할 수 있어 코드 품질을 높일 수 있습니다.
  • 뷕와 데이터 바인딩: MVVM 패턴은 데이터 바인딩을 통해 뷰와 뷰 모델을 연결할 수 있어 뷕 모델의 변경 사항이 자동으로 뷕에 반영되어 UI 업데이트를 간소화하고 일관성을 유지할 수 있습니다.
  • 재사용성: 뷰 모델은 뷰 로직을 포함하므로, 여러 뷰에서 동일한 뷰 모델을 사용하여 코드를 재사용할 수 있습니다.
  • UI와 로직의 분리: MVVM 패턴은 뷰 로직과 UI를 분리하여 디자이너와 개발자 간의 협업을 더욱 용이하게 만듭니다.

단점

  • 복잡성 증가: MVVM 패턴은 추가적인 뷰 모델 계층을 도입하므로 프로젝트 구조가 더 복잡해질 수 있습니다. 초보자에게는 어려울 수 있습니다.
  • 학습 곡선: MVVM 패턴은 MVC와는 다른 개념으로 이해하고 구현해야 하기 때문에, 팀 내에서 새로운 개념을 소개할 때 학습 곡선이 필요할 수 있습니다.
  • 적절한 상황 선택: 모든 프로젝트에 MVVM 패턴이 적합한 것은 아닐 수 있으며, 간단한 애플리케이션에서는 너무 많은 구조가 필요할 수 있습니다.
  • 모델의 과도한 부담: 너무 많은 논리를 뷰 모델에 넣으면 뷰 모델이 커져서 관리하기 어려울 수 있습니다.
  • 레거시 코드 통합: 기존의 레거시 코드와 MVVM 패턴을 통합할 때 몇 가지 어려움이 발생할 수 있습니다.