* 본 내용은 스스로 학습한 내용을 정리한 게시글입니다. *
오늘부터 Android의 MVVM 패턴에 대하여 정리해보려고 한다.
이미 기존에 대략 공부를 해보긴 했지만, 지식이 너무 얇팍하고 부족함을 느껴 글로 정리해보려고 한다.
MVVM 패턴을 사용해야 하는 이유
기존에 Android 앱을 개발하다보면 Activity 하나에 모든 기능을 쏟아붓고 방치해두다가,
며칠 지나서 수정할 일이 생겨 프로젝트를 열어보면 내가 작성한거지만 무슨 용도로 해놓은 메소드인지, 클래스인지 구분하기 어려울 정도로 체계적이지 않았다.
그러다보니 기능 추가 및 수정시 다시 소스코드를 분석해야 하므로 시간이 오래 소요되는 불필요한 상황이 만들어진다.
이런 코드를 흔히 스파게티 코드(spaghetti code)라고 부른다.
(코드가 엉키고 엉켜 스파게티처럼 꼬여있다는 뜻.)
최근엔 구글에서도 Android Jetpack의 구성요소로 AAC(Android Architecture Component) 라는 것을 제공한다.
그만큼 'MVVM 패턴'은 앱 개발에 있어 중요한 요소, 아니 필수 요소가 되어가고 있다.
MVVM을 사용하지 않았을 때의 문제점
- 앱 동작이 많아질수록(Activity 내부에 method & inner class) Activity class가 무거워짐.
- View에 사용하는 데이터들을 모두 Activity에서 관리하게 되므로 의존성이 높아짐.
- 안드로이드 생명주기에 따라 데이터가 초기화되는 문제가 발생할 수 있음.
└ ex) 화면 회전시 화면이 파괴되고 다시 그려지므로 데이터 다시 초기화되는 문제 발생
MVVM의 구조와 동작방식
MVVM은 크게 보면 Model, View, ViewModel로 총 3가지로 이루어져 있다.
View
- Activity / Fragment가 View 역할을 수행
- 2. 사용자의 Action을 입력받음 (Button, EditText etc...)
- ViewModel의 데이터를 관찰하여 실시간 UI 갱신 (LiveData 활용)
ViewModel
- View에서 데이터를 요청하면 Model에게 해당 데이터 요청 (Layer 구조)
- Model에게 요청한 데이터를 바탕으로 데이터 갱신
Model
- ViewModel이 요청한 데이터 반환
- Room, Realm과 같은 DB 사용 / Retrofit, Okhttp3를 통한 백엔드 API 호출(네트워킹)
장점
1. 기존 MVC 패턴과 다르게, View가 DB에 직접 접근하지 않고 ViewModel에 요청하여 UI 갱신에만 집중
2. ViewModel이 데이터를 가지고 있으므로 메모리 누수(Memory leak) 가능성 배제 (단, ViewModel에서 View의 context를 사용하면 안됨.)
3. 기능별로 모듈화가 잘 되어 있기 때문에 유지 보수 용이 (코드 분석이 편리함.)
'Android > MVVM' 카테고리의 다른 글
[Android][1] MVVM패턴 Databinding 맛보기! (1) | 2021.12.14 |
---|