본문 바로가기
android

디자인 패턴 MVC, MVP, MVVM

by liz_devel 2022. 11. 10.

디자인 패턴이 생긴 이유: 유지 보수를 편리하게 하기 위함

 

MVC

Model, View, Controller의 약자

Controller 안에 Model과 View의 코드가 있다

사용자가 View를 통해 입력을 하면 그것을 Cotroller에 전달한다.

Controller는 입력을 받아 Model을 업데이트한다.

View는 Model의 업데이트한 내용을 받아 View를 변경한다

이렇게 되면 View와 Model 사이의 의존성이 생긴다.

이 의존성을 분리하기 위해 나온 패턴이 MVP 패턴이다.

 

MVP

Model, View, Presenter의 약자

Presenter가 View의 입력을 받아 Model을 업데이트하고 이 업데이트한 내용을 다시 View에게 전달한다.

이렇게 되면 View와 Model의 의존성을 분리시킬 수 있지만 Presenter와 View는 1:1 관계를 갖기 때문에 View가 많아질수록 Presenter도 많이 생성된다. 1:1 관계 때문에 액티비티 안에 있는 프래그먼트 같은 다중 뷰에서도 사용하기 까다로운 패턴이다. 이러한 문제점을 보완하기 위해 나온 패턴이 MVVM 패턴이다.

 

MVVM

Model, View, ViewModel의 약자

MVVM 패턴은 MVP에서 Presenter와 View의 1:1 관계인 것과 달리 ViewModel과 View 1:다 관계가 가능하다. 한번 만들어둔 뷰모델은 액티비티 안에 있는 프래그먼트에서도 사용가능하다. View 와  Model을 완전히 분리하기 위해 DataBinding과 LiveData를 함께 사용하기도 한다.

 


ViewModel과 AAC ViewModel의 차이점

MVVM에서 말하는 ViewModel은 비즈니스 로직을 처리하는 곳이고 AAC ViewModel은 Android Architecture Components의 약자이고 Android Jetpack에 포함된 ViewModel이며 디자인 패턴 ViewModel과는 아무런 관련이 없다. AAC ViewModel은 긴 수명주기를 가지고 있어 액티비티가 destroy된 후 finished 되기 전까지는 살아있으므로 화면 회전이나 구성 변경 시에도 데이터를 유지할 수 있다는 장점이 있다.(*하단에 AAC ViewModel 수명주기 사진 참고) 이러한 장점을 가지고 있기에 개발하는 프로젝트 특성에 맞게 AAC ViewModel을 이용하여 MVVM패턴으로 개발할 수도 있다.

 

공식 문서에서 발췌한 AAC ViewModel의 생명 주기 사진입니다 https://developer.android.com/topic/libraries/architecture/viewmodel

 

반응형

'android' 카테고리의 다른 글

자바의 정석 | 객체지향 프로그래밍 1  (0) 2023.01.01
[Kotlin] Geckoview tutorial  (0) 2022.12.19
Hilt  (0) 2022.10.19
startActivityForResult() deprecated  (0) 2022.10.06
NestedScrollView 중첩 스크롤뷰  (0) 2022.09.23