wanna be dev 🧑‍💻

Cool 하고 Sick한 개발자가 되고 싶은 uzun입니다 solvedac-logo

Android/Architect | Pattern

💡 안드로이드에서 MVVM 패턴이란?

Kick_snare 2022. 8. 20. 20:18
728x90

기존 개발방법의 문제점 (MVC)

예를 들어 간단한 메모 앱을 만들 때 사용자의 입력, 입력값 저장, 불러오기 등의 모든 로직을 Activity에서 모두 처리한다면 기능을 수정하거나 확장할때 모두 갈아엎어야 하는 기현상을 경험할 수 있다.

  • 앱 동작이 많아질 수 록 Activity 자체가 무거워 짐
  • View와 Model 간의 의존성이 높아져 코드가 복장성을 띔
  • View의 UI Refresh를 위해 모델을 참조하여 복잡해짐

구현하기는 쉽겠지만 여러 기능들이 분리되지 않고 코드간의 연관성이 너무 밀접해서 유지보수가 힘들어지는 문제를 해결하기 위해 패턴을 사용한다.

프로그램 구조를 적절히 설계하고 기능에 따라 분리해 코드를 작성하는 여러 아키텍처 중 하나인 MVVM 패턴

What’s MVVM

MVVM 패턴은

  • Model
  • View
  • ViewModel

을 분리해 모델간의 의존성을 줄여주도록 한다.

  1. 뷰: 이벤트를 발생시켜 데이터를 요청
  2. 뷰모델: 해당 데이터를 불러오는 모델의 메소드를 호출
  3. 모델: 뷰모델에서 요청하는 값을 반환
  4. 뷰모델: 모델로부터 받은 값을 라이브데이터에 저장
  5. 뷰: 라이브데이터를 관찰하여 저장된 값을 뷰에 출력

이러한 구조는 뷰와 모델을 분리함으로써 독립적으로 로직을 작성할 수 있게 된다.

ViewModel

화면 변화시에도 변하지 않는 데이터를 가지고 있다. View가 요청한 데이터를 Model로 요청해주고, 데이터를 받아온다. View가 DB에 직접 접근하지 않고 View에만 집중하도록 하주는 것

Live Data (AAC)

  • View가 ViewModel을 관찰할 때, 그 관찰 대상이 되는 데이터 홀더 클래스
  • Activity, Fragment 및 Services와 같은 구성요소에서 관찰할 수 있는 데이터 집합을 보유
  • 수명주기를 인식하여 활성화 시에만 데이터를 게시하여 메모리 누수를 방지

Flow

  • LiveData 는 UI 에 밀접하게 연관되어 있기 때문에 Data Layer 에서 비동기 방식으로 데이터를 처리하기에 자연스러운 방법이 없다.
  • LiveData 는 안드로이드 플랫폼에 속해 있기 때문에 순수 Java / Kotlin 을 사용해야 하는 Domain Layer 에서 사용하기에 적합하지 않다.
  • Flow 는 스스로 안드로이드 생명주기에 대해 알지 못함. 그래서 라이프사이클에 따른 중지나 재개가 어렵다.
  • Flow 는 상태가 없어 값이 할당된 것인지, 현재 값은 무엇인지 알기가 어렵다.
  • StateFlow

참고

 

[Android] MVVM 패턴과 적용방식

[Android] MVVM 패턴과 적용방식

velog.io

 

[Android] LiveData VS StateFlow, 왜 StateFlow 를 써야할까?

LiveData 는 Lifecycle 라이브러리 중 하나로, 안드로이드 공통의 라이프사이클과 관련된 문제를 해결할 수 있게 해 주면서 앱 개발시 보다 더 유지보수하기 쉽게, 테스트하기 쉽게 만들어주는 라이

readystory.tistory.com

 

안드로이드 MVVM 패턴

안녕하세요, 하루플입니다. MVVM에 대해 공부하면서 글을 작성해봅니다! MVC 패턴의 장단점 기존 사용했던 MVC 패턴은 단순히 하나의 Activity와 Fragment에 코드를 전부 때려넣는 방식이었습니다. MVC는

haruple.tistory.com

 

 

앱 아키텍처 가이드  |  Android 개발자  |  Android Developers

앱 아키텍처 가이드 이 가이드에는 고품질의 강력한 앱을 빌드하기 위한 권장사항 및 권장 아키텍처가 포함되어 있습니다. 참고: 이 페이지는 Android 프레임워크 기본을 잘 아는 사용자를 대상으

developer.android.com

 

728x90