본문 바로가기
Android/기본

[Android] MVVM 패턴(Model-View-ViewModel)

by LoseyKim 2024. 3. 14.

MVVM Diagram

복잡한 로직과 데이터 관리, 그리고 반응형 UI를 효과적으로 다루기 위해서는아키텍처 패턴이 필요합니다.

오늘은 MVVM(Model-View-ViewModel) 아키텍처 패턴에 대해 이야기하고자 합니다.


MVVM이란?

MVVM(Model-View-ViewModel) 아키텍처 패턴은 코드의 구조를 깔끔하게 유지하고, 테스트를 용이하게 하며, 유지보수를 간편하게 만드는 현대적인 솔루션입니다. MVVM은 앱의 비즈니스 로직과 사용자 인터페이스를 효과적으로 분리함으로써 애플리케이션의 확장성과 유지보수성을 대폭 향상시킵니다.


MVVM 장점

  • 코드 분리: 비즈니스 로직과 UI 로직의 철저한 분리로 코드 관리가 용이해집니다.
  • 재사용성: 뷰모델을 통한 로직의 재사용성이 높아지며, 다양한 뷰에서 동일한 뷰모델을 사용할 수 있습니다.
  • 테스트 용이성: UI 로직과 분리된 비즈니스 로직은 단위 테스트하기가 더 쉬워집니다.
  • 유지보수: 명확한 역할 분담으로 인해 앱의 유지보수가 용이해집니다.

1. 모델(Model)

  • 애플리케이션의 데이터 처리와 비즈니스 로직을 담당하는 핵심적인부분입니다.
  • 네트워크 요청, 데이터베이스 트랜잭션, 데이터 가공 등을 포함할 수 있습니다.
  • 모델은 직접적으로 뷰에 데이터를 전달하지 않고, 뷰모델을 통해 간접적으로 데이터를 전달합니다.
  • '무엇'을 할 것인지에 대한 정보를 담고 있으며, 이 데이터를 어떻게 사용자에게 표시할지는 다루지 않습니다.

2. 뷰(View)

  • 사용자 인터페이스(UI)를 담당합니다.
  • 액티비티(Activity)와 프래그먼트(Fragment)가 뷰의 역할을 주로 합니다.
  • 사용자에게 데이터를 표시하고 사용자의 입력을 받아 처리합니다.
  • 어떠한 비즈니스 로직도 포함하지 않으며 오직 프레젠테이션 로직에 집중합니다.

3. 뷰모델(ViewModel)

  • 뷰와 모델 사이의 매개체 역할을 합니다.
  • 뷰에 데이터를 제공하고, 뷰의 이벤트를 처리하는 로직을 포함합니다.
  • 모델로부터 데이터를 가져와서, 뷰가 필요로 하는 형태로 가공하여 뷰에 데이터를 제공합니다.
  • 뷰에 종속적이지 않으며, 뷰에서 발생하는 사용자의 액션에 반응하여 모델을 업데이트합니다.
  • 뷰의 상태를 관리하며, LiveData나 Observable과 같은 반응형 컴포넌트를 사용하여 데이터의 변경 사항을 뷰에 자동으로 반영하도록 할 수 있습니다.
  • 뷰와 모델 사이의 의존성이 줄어들고, 코드의 재사용성과 테스트 용이성이 향상됩니다.

데이터 바인딩(Data Binding)

뷰와 뷰모델 사이의 상호작용이 간소화되며 원활한 데이터 통신을 가능하게 합니다. 데이터 바인딩은 뷰모델의 데이터 변화를 자동으로 감지하여 UI를 실시간으로 업데이트하며, 반대로 사용자 입력을 뷰모델로 전달하여 앱 로직을 실행합니다.

개발자는 UI 업데이트를 위한 별도의 코드 작성 없이도, 뷰와 뷰모델의 데이터를 XML 레이아웃 파일 내에서 직접 연결할 수 있습니다.

MVVM 아키텍처에서 뷰와 뷰모델 사이의 소통을 간단하고 효율적으로 만들어, 안드로이드 애플리케이션 개발을 더욱 신속하고 쉽게 할 수 있도록 돕습니다.