오늘은 디자인 패턴의 마지막으로 MVVM 패턴에 대해서 정리를 해보자.
MVVM 패턴이란?
MVVM 패턴은 Model, View, ViewModel로 이루어진 디자인 패턴으로 어플리케이션의 유지보수와 테스트 용이성을 높이기 위해 사용된다. MVVM은 UI 코드와 비즈니스 로직을 분리하여 코드의 재사용성을 높이고, 데이터 바인딩을 통해 실시간 데이터 업데이트를 용이하게 한다.

1. MVVM 패턴의 구조
-> Model + View + ViewModel로 구성
2. MVC 구성요소
1) Model : Model은 어플리케이션의 데이터와 비즈니스 로직을 담당한다. 데이터베이스, 네트워크, 로컬 저장소와의 통신을 처리하고, 데이터의 저장, 검색, 조작을 수행한다.
2) View : View는 사용자 인터페이스를 나타내며, 사용자와의 상호작용을 처리한다. 사용자가 입력한 데이터를 ViewModel에 전달하고, ViewModel에서 제공하는 데이터를 표시한다. 안드로이드는 주로 Activity나 Fragment로 구현된다.
3) ViewModel : ViewModel은 UI 관련 데이터를 보유하고 있으며, View와 Model 사이의 중개자 역할을 한다. LiveData나 StateFlow를 사용하여 View에 데이터를 제공하고, 사용자의 입력을 처리하여 Model에 전달한다. ViewModel은 수명 주기 인식을 통해 메모리 누수를 방지하고, UI 상태를 안전하게 유지한다.
3. MVVM 패턴 상호작용
1. View : 사용자 인터페이스와 상호작용한다. 입력을 ViewModel에 전달한다.
2. ViewModel : 입력을 처리하고, Model을 업데이트한다. Model의 변경 사항을 받아서 LiveData를 통해 View를 업데이트한다.
3. Model : 데이터와 비즈니스 로직을 관리한다. ViewModel의 요청에 따라 데이터를 제공하거나 상태를 변경한다.
4. 장점과 단점
<장점>
1. 유지보수 용이성 : UI 로직과 비즈니스 로직이 분리되어 유지보수가 용이하다.
2. 데이터 바인딩 : View와 ViewModel 간의 데이터 바인딩을 통해 코드가 간결해지고, UI와 로직의 분리가 더욱 명확해진다.
3. 재사용성 : ViewModel은 특정 View에 종속되지 않으므로, 여러 View에서 재사용 될 수 있다.
4. 테스트 용이성 : ViewModel은 UI와 독립적이므로 유닛 테스트가 용이하다.
<단점>
1. 복잡성 증가 : 작은 어플리케이션에서는 MVVM의 구조가 과할 수 있다.
2. 데이터 바인딩 오류 : 잘못된 바인딩 설정은 디버깅이 어려울 수 있다.
6. MVVM vs MVP
- MVVM와 MVP의 차이점은 View와의 관계를 보면 알 수 있다.
View와 관계에서 ViewModel은 단방향이고, Presenter은 양방향으로 처리를 한다.
Presenter은 View에게 뷰 변경 요청을 보내지만, ViewModel은 View에게 어떠한 요청도 보내지 않는다
MVVM에서 View가 ViewModel의 데이터를 관찰하다가 변경되면 변경을 적용할 뿐이다.
7. MVC vs MVP vs MVVM
| 패턴 | MVC 패턴 | MVP 패턴 | MVVM 패턴 |
| 관계 | 컨트롤러 : 뷰 = 1 : n | 프로젠터 : 뷰 = 1 : 1 | 뷰모델 : 뷰 = 1 : n |
| 참조 | 뷰는 컨트롤러 참조 x | 뷰는 프레젠터 참조 0 | 뷰는 모델 참조 0 |
'📚 CS > 그 외' 카테고리의 다른 글
| GitHub의 동작 원리, 작업 공간 (2) | 2024.11.02 |
|---|---|
| [JAVA] 클래스 vs 객체 vs 인스턴스, 무엇이 다를까? (0) | 2024.09.24 |
| JSON - 직렬화, 역직렬화 (0) | 2024.09.23 |
| [CS] 디자인 패턴 (2) - MVP (0) | 2024.06.07 |
| [CS] 디자인 패턴 (1) - MVC (0) | 2024.06.02 |