기존 개발방법의 문제점 (MVC)
예를 들어 간단한 메모 앱을 만들 때 사용자의 입력, 입력값 저장, 불러오기 등의 모든 로직을 Activity에서 모두 처리한다면 기능을 수정하거나 확장할때 모두 갈아엎어야 하는 기현상을 경험할 수 있다.
- 앱 동작이 많아질 수 록 Activity 자체가 무거워 짐
- View와 Model 간의 의존성이 높아져 코드가 복장성을 띔
- View의 UI Refresh를 위해 모델을 참조하여 복잡해짐
구현하기는 쉽겠지만 여러 기능들이 분리되지 않고 코드간의 연관성이 너무 밀접해서 유지보수가 힘들어지는 문제를 해결하기 위해 패턴을 사용한다.
프로그램 구조를 적절히 설계하고 기능에 따라 분리해 코드를 작성하는 여러 아키텍처 중 하나인 MVVM 패턴
What’s MVVM
MVVM 패턴은
- Model
- View
- ViewModel
을 분리해 모델간의 의존성을 줄여주도록 한다.
- 뷰: 이벤트를 발생시켜 데이터를 요청
- 뷰모델: 해당 데이터를 불러오는 모델의 메소드를 호출
- 모델: 뷰모델에서 요청하는 값을 반환
- 뷰모델: 모델로부터 받은 값을 라이브데이터에 저장
- 뷰: 라이브데이터를 관찰하여 저장된 값을 뷰에 출력
이러한 구조는 뷰와 모델을 분리함으로써 독립적으로 로직을 작성할 수 있게 된다.
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 > Study' 카테고리의 다른 글
🌊 Flow Api 안드로이드 라이브러리 파헤치기 (0) | 2022.08.20 |
---|---|
⚔️ Dagger Hilt 안드로이드 DI 라이브러리 알아보기 (0) | 2022.08.20 |
🏛 클린 아키텍처 in 안드로이드 (Clean Architecture) (0) | 2022.08.20 |
💉 Dependency Injection 의존성 주입이란? (0) | 2022.08.20 |
📥 단방향 데이터 플로우 Undirectional Data Flow (UDF) 패턴 (0) | 2022.08.20 |