Notice
Recent Posts
Recent Comments
Link
«   2025/11   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
Tags
more
Archives
Today
Total
관리 메뉴

성장기록지

안드로이드 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와 동기화.\
      • 양방향 바인딩으로 xml 에서 변화를 viewmodel로 바로 전달

 

요약

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

 

참고자료

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

'안드로이드' 카테고리의 다른 글

Kotlin Flow란?  (0) 2025.01.24
Kotlin Data Stream (Sequence, Hot, Cold Stream)  (1) 2025.01.23
data binding이란?  (1) 2025.01.11
State hoisting 탐구 (재사용성, plain state holder class)  (1) 2025.01.10
Compose State와 State hoisting  (0) 2025.01.08