-
[Android] MVVM 패턴 적용 - ACCAndroid 2022. 10. 10. 23:59
- 안드로이드 스튜디오에서 개발하다 보면 보통 Activity 클래스에 모든 앱 동작 코드를 넣음
- 이러한 방법은 추후에 유지 보수가 어려움 -> MVVM 패턴 적용해보자
- 구글에서는 Android Jetpack의 구성요소로써 AAC(Android Architecture Component)를 제공함
MVC 패턴?
- 안드로이드 스튜디오에서 MVC 패턴에 따라 Activity에 모든 코드를 넣으면
1. View와 Model간의 의존성이 높아져서 코드가 복잡해짐
2. View의 UI Refresh를 위해 Model을 참조하므로 앱 규모가 커질수록 코드가 복잡해짐
MVVM 패턴?
- Controller 에게 막중한 역할을 부여하기보다, 이 동작 자체를 분리하여 동작의 흐름을 체계적으로 만들어주고
유지보수를 편리하게 할 수 있게함
View - Observe
1. Activity / Fragment가 View 역할을 함
2. 사용자의 Action을 받음
3. ViewModel의 데이터를 관찰하여 UI 갱신
ViewModel
1. View가 요청한 데이터를 Model로 요청함
2. Model로부터 요청한 데이터를 받음
Model
1. ViewModel이 요청한 데이터를 반환함
2. DB 사용, Retrofit을 통한 백엔드 API 호출
VIew가 ViewModel이 쥐고있는 데이터를 관찰함 (Observing)
View가 DB에 접근 안하고 UI 업데이트에만 집중함
그렇담 이제 AAC에서의 MVVM 패턴을 살펴보자!
ViewModel
- 화면 변화 시에도 변하지 않는 데이터를 가지고 있음
- 원래는 Activity/Fragment 창을 나가면 그 창이 destroy 되는데 viewmodel을 이용하면 생명주기동안 데이터를 유지할 수 있음
Live Data
- View가 ViewModel을 관찰할 때, 그 관찰 대상이 되는 데이터 홀더 클래스
- Live Data는 Activity 및 Fragment의 Life Cycle을 인지하지 못하므로 화면이 활성화 되어 있을 때만 동작하여 메모리 릭을 줄여줌
Repository
- ViewModel과 데이터를 주고받기 위해 데이터 API를 포함하는 클래스임
- 사용자 동작에 따라 필요한 데이터나 외부 백엔드 서버 등에서 데이터를 가져오게됨
- ViewModel이 데이터를 관리할 필요가 없게 됨
ex) 여기에서 Retrofit API를 정의해주면 된다
Room
- SQlite에 추상화 레이어를 제공하여 원활한 DB 엑세스를 지원함
Databinding
- 데이터를 XML 파일에서 처리함
- 코드가 단순해지고 메모리 누수가 방지됨
MVVM의 동작 순서
1. 사용자의 Action들은 View를 통해서 들어온다.
2. View에서 사용자로부터 받은 Action을 ViewModel에게 전달함
3. ViewModel은 사용자로부터 Action에서 필요한 정보들을 Model에게 요청함
4. Model은 ViewModel에게 요청받은 데이터를 가져와서 전달해줌
5. ViewModel은 Model로부터 전달받은 데이터를 가공해서 저장함
6. View는 ViewModel과 DataBinding하여 화면에 나타냄
예시를 통해 다음장에서 확인해보기
https://wpioneer.tistory.com/152?category=1011784
https://woovictory.github.io/2019/06/10/Android-MVVM/
https://velog.io/@hwi_chance/Android-%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-AAC
'Android' 카테고리의 다른 글
[Android] DataBinding (3) 2022.10.15 [Android] MVVM 패턴 적용 - ACC 예제 (0) 2022.10.11