이번에는 안드로이드에서 사용하는 디자인 패턴 중 MVVM 패턴에 대해서 알아보자.
1. 좋은 코드란?
좋은 코드란 무엇일까. 가독성? 간결함? 등 여러 의견들이 나올 수 있지만
디자인 패턴에서의 좋은 코드는 의미가 다르다. 디자인 패턴에서는 설계적 관점에서의 좋은 코드를 의미한다.
확장과 수정에 용이하고 또 유지보수에 비용이 적게 들어가는 코드가 좋은 코드라 할 수 있다.
예를 들어, 어떠한 요구 사항대로 코드를 수정해야하는 상황이 생기거나, 개발을 진행하는 중에 한 부분이 잘못되어 수정해야하는 상황이라면 한 부분을 수정하기 위해 다른 부분을 수정해야하고, 또 그 부분을 수정하면 다른 부분을 수정해야하는 구조라면 수정해야 할 부분이 많아진다. 이러한 코드는 디자인 패턴의 설계적 관점으로 봤을 때 좋은 코드라 할 수 없다. 즉, 객체 간 응집도는 높이고 결합도는 낮게 유지하는 것이 좋은 코드라 할 수 있는 것이다.
그럼 이러한 좋은 코드를 만들 수 있는 구조인 MVVM패턴에 대해서 알아보자.
응집도↑: 비슷한 일을 하는 기능들이 하나의 모듈로 얼마나 잘 뭉쳐있나
결합도↓: 해당 일을 완수하기 위해서 얼마나 다른 모듈에 작게 의존하느냐
2. MVVM패턴이란?

MVVM패턴은 View, ViewModel, Model로 구성되어 있다. 각자 수행하는 역할에 대해 알아보자.
View: 오로지 사용자의 Action을 받고 UI를 업데이트 하기 위한 작업을 수행
ViewModel: View가 요청한 데이터를 Model로 요청을 하고 받은 데이터를 다시 View로 넘겨주는 작업 수행
Model: DB, Network 같은 작업을 수행
ViewModel이 Model에서 요청받은 모든 데이터 처리를 담당하고 중간다리 역할을 수행하는 것이다.
그러면서 View에서 ViewModel의 데이터를 관찰하고 UI를 업데이트 하게 된다.
3. MVVM패턴의 장단점?
그러면 MVVM패턴의 장점은 어떠한 것들이 있을까?
1. 뷰가 데이터를 실시간으로 관찰한다.
- View에서 ViewModel에 있는 데이터를 관찰하기 때문에, 직접 뷰를 바꿔주는 번거러움도 없고, 데이터와의 불일치성을 낮춰준다.
2. 생명주기로부터 안전하다.
- 엑티비티나 프래그먼트가 사라져도 ViewModel에서 데이터를 홀드하고 있기 때문에 영향을 받지 않는다.
- 뷰가 활성화 되는 상태를 인지하여 동작하기 때문에 메모리 사용을 줄일 수 있다.
3. 모듈화가 잘 되어 있다.
- UI와 비즈니스 로직, 그리고 모델이 다 각자의 역할을 수행하고 있기 때문에 모듈화가 잘 되어 있다.
이러한 장점들도 있지만 MVVM패턴으로 설계를 하게되면 구조가 복잡해져서 설계하기 쉽지 않은 단점도 존재한다.
그래도 구글에서 MVVM패턴을 쉽게 구성할 수 있도록하는 AAC 라이브러리를 제공한다.
AAC 라이브러리에 대해서 간단하게 살펴보자.
4. AAC

ViewModel
- 생명주기에 영향을 받지 않는 LiveData가 존재한다.
- 이 데이터가 변하게 되면 Observer에서 데이터 변화를 감지해 뷰를 바꿔주게 된다.
- 화면이 활성화 되어 있을 때만 동작하기 때문에 메모리 릭을 줄여 줄 수 있다.
Repository
- ViewModel과 데이터를 주고받기 위해 필요한 데이터를 서버나 로컬에서 가져오는 부분이다.
- Repository 덕분에 ViewModel이 데이터를 따로 관리할 필요가 없다.
RoomDatabase
- SQLite를 좀 더 쉽게 사용하는 ORM 라이브러리다.
- 쿼리문을 작성할 필요 없이 Insert나 Delete 등의 동작을 수행할 수 있다.
MVVM패턴과 AAC 라이브러리에 대해서 알아보았다.
좀 더 체계적인 구조를 설계하기 위해서는 MVVM패턴을 사용하는 것을 권장한다.
추후에는 DI(의존성 주입)에 대해 자세히 알아보겠다.
'개발 > Android' 카테고리의 다른 글
[Android] TimePicker 텍스트, 구분선 색상 변경 (Spinner) (0) | 2022.01.07 |
---|---|
[Android] API KEY 관리 (0) | 2021.12.24 |
[Android] 이미지 색상 코드 찾기 (0) | 2021.12.20 |