본문 바로가기

카테고리 없음

MVVM 패턴

MVVM 패턴은 MVC 패턴에서 Controller를 빼고 ViewModel을 추가한 패턴입니다.

 

MVVM 동작 과정

 

  1. 사용자의 Action들은 View를 통해 들어옵니다.
  2. View에 Action이 들어오면 ViewModel에 Action을 전달합니다.
  3. ViewModel은 Model에게 데이터를 요청합니다.
  4. Model은 ViewModel에게 요청받은 데이터를 응답합니다.
  5. ViewModel은 응답 받은 데이터를 가공하여 저장합니다.
  6. View는 Data Binding을 이용해 UI를 갱신시킵니다.

역할 및 동작 원리

View:레이아웃과 화면을 보여주는 역할

  • 사용자 인터페이스를 담당하는 부분입니다.
  • 사용자가 보는 화면을 표시하고, 사용자 입력을 처리합니다.
  • 보통 XAML과 같은 마크업 언어를 사용하여 디자인됩니다.

ViewModel

  • View와 Model 사이에서 중재자 역할을 수행합니다.
  • View에서 발생하는 이벤트를 감지하고, 해당 이벤트에 맞는 비즈니스 로직을 수행합니다.
  • Model과 상호작용하여 데이터를 가져오거나 업데이트하고, View에 데이터를 업데이트하는 역할을 합니다.
  • View에 표시할 데이터를 가공하여 제공하는 역할을 합니다.

 

Model
데이터, 비즈니스 로직, 서비스 클라이언트 등으로 구성한다.
실제적 데이터

  1. View에 입력이 들어오면 ViewModel에게 명령을 합니다
  2. ViewModel은 필요한 데이터를 Model에게 요청합니다
  3. Model은 ViewModel에게 요청된 데이터를 응답합니다
  4. ViewModel은 응답 받은 데이터를 가공해서 저장합니다
  5. View는 ViewModel과의 Data Binding으로 인해 자동으로 갱신됩니다

 

MVVM 특징

언뜻 보기에는 MVP와 비슷한 부분이 많습니다. 그러나 MVP는 View와 Presenter 사이의 의존관계가 1:1로 형성되어있다면, MVVM은 View와 ViewModel사이의 관계가 1대n으로 되어있습니다. 또한 데이터 바인딩을 이용한다면 View ViewModel 사이의 의존성을 없앨 수 있습니다.

MVVM 패턴의 장단점

장점

  • View와 Model이 서로 전혀 알지 못하기에 독립성을 유지할 수 있다
  • 독립성을 유지하기 때문에 효율적인 유닛테스트가 가능하다
  • View와 ViewModel을 바인딩하기 때문에 코드의 양이 줄어든다
  • View와 ViewModel의 관계는 N:1 관계이다
  • 유닛테스트를 하기가 좋습니다. 그 이유는 ViewModel에는 UIKit 관련 코드가 없고 Controller와의 의존성도 없기 때문이다
    유닛테스트(Unit Test)는 하나의 메서드의 특정 루틴을 검사한다.

단점

  • 간단한 UI에서 오히려 ViewModel을 설계하는 어려움이 있을 수 있다.
  • 데이터 바인딩이 필수적으로 요구된다. 그래서 메모리 소모가 심하다.
  • 복잡해질수록 Controller처럼 ViewModel이 빠르게 비대해진다. 표준화된 틀이 존재하지 않아 사람마다 이해가 다르다.(표준화 필요)
  • View가 변수와 표현식 모두에 binding 될 수 있으므로 시간이 지남에 따라 관계없는 Presentation Logic이 늘어나고 이를 보완하기 위해 XML에 코드를 추가하게 된다. 이때 난해하게 코드가 증가된다면 유지보수 단계에서 어려움을 겪을 수 있다.

Data Binding

데이터 바인딩의 개념은 쉽게 말해 Model과 UI 요소 간의 싱크를 맞춰주는 것이라 할 수 있습니다. 이 패턴을 통해 View와 로직이 분리되어 있어도 한 쪽이 바뀌면 다른 쪽도 업데이트가 이루어져 데이터의 일관성을 유지할 수 있습니다. iOS에서 데이터 바인딩을 하는 방법은 다음과 같습니다.

  • KVO
  • Delegation
  • Functional Reactive Programming
  • Property Observer

 

 

728x90