성장기록지

안드로이드 MVVM 아키텍쳐란? 본문

안드로이드/안드로이드 지식

안드로이드 MVVM 아키텍쳐란?

pengcon 2025. 1. 13. 14:46
MVVM 아키텍처 패턴 개요

MVVM(Model-View-ViewModel) 패턴은 안드로이드 앱 개발에서 구조적 명확성과 확장성을 위해 널리 사용되는 설계 패턴이다. 이 패턴은 다음 세 가지 구성 요소로 나뉜다.

1. Model

  • 앱의 데이터 및 비즈니스 로직을 담당한다.
  • 데이터 소스와의 상호작용 및 데이터 처리를 수행한다.

2. View

      • 역할: 사용자가 직접 상호작용하는 UI 부분. 레이아웃 파일(.xml), Activity, Fragment 등이 포함된다.
      • 의존성 제거: LiveData나 DataBinding을 사용하여 ViewModel과의 의존성을 최소화한다.
      • 주요 기술:
        • LiveData: ViewModel로부터 데이터를 관찰하고 변경 사항을 자동으로 UI에 반영.
        • DataBinding: 레이아웃 파일에 ViewModel 데이터를 직접 바인딩하여 코드 간소화.
      • 바인딩 방식:
        1. Activity 또는 Fragment에서 코드로 ViewModel과 View를 바인딩.
        2. 레이아웃 파일에 DataBinding을 설정하여 직접 ViewModel과 연결.

3. ViewModel

    • 역할: View에 필요한 데이터를 Model에서 가져와 처리하고, LiveData 또는 다른 방식으로 View에 전달.
    • View와의 차이점:
      • View와 달리 UI 구성 요소에 직접 접근하지 않음.
      • LiveData와 DataBinding으로 View와의 의존성을 제거.
    • Jetpack ViewModel의 장점:
      • UI 데이터의 수명주기를 자동 관리.
      • Activity나 Fragment가 소멸되어도 데이터를 유지.
    • 특징:
      • Jetpack ViewModel은 편리한 도구일 뿐, MVVM 구현에 필수 요소는 아님.
      • ViewModel 라이브러리를 사용하지 않아도 MVVM 패턴을 구현할 수 있음.

MVVM을 설명하는데 아래와 같은 구조 그림이 큰 도움이 된다.

  • View와 Model의 분리:
    View와 Model은 서로 독립적으로 동작하며, View는 ViewModel에 의존하지만, ViewModel은 View에 의존하지 않음.

 

  • 데이터 전달을 하는 점선의 의미 (1번과 2번은 다른 경우이다!)
    1. LiveData를 이용한 데이터 전달:
      • View가 ViewModel을 참조하여 LiveData의 Observer를 등록.
      • View는 LiveData의 변경된 값을 수신하고 UI를 업데이트.
    2. DataBinding 라이브러리를 이용한 데이터 동기화:
      • 레이아웃 파일에서 ViewModel 데이터를 직접 바인딩하여 자동으로 UI와 동기화.\
      • 옵저버를 연결시켜주지 않더라도 데이터 변경 감시를 위해 LiveData는 필요! 

 

요약

  • DataBinding 라이브러리를 사용하지 않더라도 LiveData를 활용한 방식은 전통적인 의미에서 DataBinding을 구현하고 있다. (하지만 UI 관련 보일러 플레이트 등의 문제가 있다!)
  • 구현 방식에 따라 데이터 전달 및 동기화 방식은 달라질 수 있다.
  • 결국 MVVM의 본질은 View와 ViewModel 간 의존성을 최소화하고, 데이터 동기화를 효율적으로 수행하는 데 있다!

의문점)

그렇다면 mvvm에서 리사이클러뷰의 어댑터에 데이터를 할당하려면 observe가 필요한데, 이는 어떻게 생각되어지는가?

실제 프로젝트를 적용해보고 학습해보며 의문을 풀고 포스팅 해보겠다.

 

참고자료

https://brunch.co.kr/@mystoryg/175