위키읽기 : 모델-뷰-뷰모델(MVVM)구조

김성환·2024년 4월 24일

모델-뷰-뷰 모델(model-view-viewmodel, MVVM)


소프트웨어 아키텍처 패턴, 뷰가 뷰 모델을 가짐으로서 어느 특정한 모델 플랫폼에 종속되지 않도록 해준다.

MVVM의 뷰 모델은 값 변환기인데, 이는 뷰 모델이 모델에 있는 데이터 객체를 노출(변환)하는 책임을 지기 때문에 객체를 관리하고 표현하기가 쉬워진다는 것을 의미한다.

뷰 모델은 뷰 보다는 더 모델인 것이며, 모든 뷰들의 디스플레이 로직을 제외한 대부분의 것들을 처리한다.

뷰 모델은 '백-엔드 로직에 대한 접근'과 그 주변부의 '뷰에서 지원하는 유즈 케이스 집합'으로 구성되도록, 중재자 패턴으로 구현할 수도 있다.

모델-뷰-뷰모델은 모델-뷰-바인더(model-view-binder)라고도 하는데, 특히 닷넷 플랫폼과 상관없이 구현된 경우를 지칭한다.


모델 (Model)

  • 모델은 실제 상태 내용을 표현하는, 도메인 모델을 참조하거나 내용을 표현하는, 데이터 접근 계층을 참조

뷰 (View)

  • 뷰는 사용자가 화면에서 보는 것들에 대한 구조, 배치, 그리고 외관에 해당
  • 모델을 보여서 표현하고 사용자와 뷰의 상호 작용을 수신
  • 수신에 대한 처리를 뷰와 뷰 모델의 연결을 정의하고 있는 데이터 바인딩을 통하여 뷰 모델로 전달

뷰 모델 (View Model)

  • 뷰 모델은 공용 속성과 공용 명령을 노출하는 뷰에 대한 추상화
  • MVVM은 바인더(binder, 연결자)를 가지고 있음
    이는 뷰 모델에 있는 뷰에 연결된 속성과 뷰 사이의 통신을 자동화 한다.
  • 뷰 모델은 모델에 있는 데이터의 상태
  • 프리젠터는 뷰에 대한 참조를 가지고 있는 반면, 뷰 모델은 그렇지 않음
  • 뷰는 뷰 모델의 속성에 직접 '연결된(binds)' 채로 업데이트를 주고 받음

바인더 (Binder, 연결자)

  • 선언적인 데이터와 '명령-바인딩(명령-연결)'이 내재
  • 바인더는 뷰 모델과 뷰의 동기화를 위해 상용구 로직을 작성해야 하는 의무에서 개발자를 해방시켜줌

비판

  • 단순한 UI 작업에서는 MVVM을 구현하는 부담, 지나치게 과하다

  • 응용 프로그램이 점점 더 커짐에 따라서, 뷰 모델을 폭 넓게 사용하기가 점점 더 어려워짐

  • 아주 큰 응용 프로그램에서 데이터 바인딩을 사용하게 되면 눈에 띄게 메모리를 소모하게 된다


읽고난후

MVVM은 좋은 구조인것은 맞지만 모든앱에 적용하기에는 단점이 보임 예를들어 작은앱에는 MVC가 적절할것이며 응용프로그램이 커짐에따라 많은 메모리를 사용하는 부분은 앱이 커지면 커질수록 모든구조는 문제가 생기지만 MVVM은 코드의 모듈화와 재사용성을 향상시키고, 유지 보수를 용이하게해준다는 장점이 있기때문에 필요하지 않은 데이터 바인딩을 제거하거난 메모리 최적화 기술등을 적용하는것이 좋아보임.


reference
https://ko.wikipedia.org/wiki/%EB%AA%A8%EB%8D%B8-%EB%B7%B0-%EB%B7%B0%EB%AA%A8%EB%8D%B8#MVVM_%ED%8C%A8%ED%84%B4%EC%9D%98_%EA%B5%AC%EC%84%B1_%EC%9A%94%EC%86%8C

0개의 댓글