안드로이드 개발자의 창고
[Android] MVC / MVP / MVVM 차이 본문
📖 MVC
Model - View - Controller로 이루어진 패턴
Model
- 앱이 포함해야할 데이터가 무엇인지를 정의
- 데이터의 상태가 변경되면 일반적으로 View에게 알려주지만 가끔은 Controller에도 알려준다.
- 가끔 Controller에게 알려주는 경우는 업데이트 된 View를 제어하기 위해 다른 로직이 필요한 경우이다.
View
- 데이터를 보여주는 방식을 정의한다.
- 표시할 데이터는 Model로 부터 받게 된다.
Cotroller
- 사용자로부터 입력에 대한 응답으로 Model 또는 View를 업데이트하는 로직을 포함한다.
동작 과정 예시
사용자가 to-do 리스트 목록에 있다고 가정하면
- 사용자가 리스트를 추가하기 위해 내용을 작성하고 추가 버튼을 눌렀다.
- 이러한 이벤트는 Controller에 전달된다.
- Controller는 Model이 수행할 메서드와 파라미터(사용자가 입력한 내용)를 전달한다.
- Model은 전달 받은 데이터로 메서드를 수행하고 데이터를 업데이트 한다.
- Controller는 Model을 나타내 줄 View를 선택한다.
- View는 Model을 이용하여 작성한 내용이 추가된 to-do 리스트를 표시한다.
MVC - MDN Web Docs 용어 사전: 웹 용어 정의 | MDN
MVC (모델-뷰-컨트롤러) 는 사용자 인터페이스, 데이터 및 논리 제어를 구현하는데 널리 사용되는 소프트웨어 디자인 패턴입니다. 소프트웨어의 비즈니스 로직과 화면을 구분하는데 중점을 두고
developer.mozilla.org
📖 MVP
Model - View - Presenter로 이루어진 패턴
Model
- 모델은 데이터와 비즈니스 로직을 나타냄
- 데이터를 저장하고 관리하며, 데이터를 변경하거나 가져오는 작업을 처리
View
- 사용자 인터페이스를 나타내며, 사용자와 상호작용을 하는 구성 요소
- 수동적이며 비즈니스 로직을 포함하지 않음
- Presenter에 의존하여 사용자 입력과 데이터 표시를 처리
Presenter
- Model과 View의 중개자 역할
- View에서 사용자 입력을 받아 처리
- 필요한 데이터 작업을 수행하기 위해 Model과 상호 작용하며 변경 사항을 반영하도록 View를 업데이트
동작 과정 예시
사용자가 to-do 리스트 목록에 있다고 가정하면
- 사용자가 새로운 내용을 입력하고 추가 버튼을 누른다.
- View는 사용자의 입력과 "추가" 버튼 클릭 이벤트를 Presenter에 전달한다.
- Presenter는 입력된 내용을 Model에 전달하여 목록에 추가한다.
- Model은 업데이트된 리스트를 반환한다.
- Presenter는 새로 업데이트된 리스트를 View에 전달하여 화면을 업데이트 한다.
📖 MVVM
Model - View - ViewModel로 이루어진 패턴
Model
- 데이터와 비즈니스 로직을 관리
- 데이터 소스와 상호작용하여 데이터를 가져오고 저장
- UI와 직접적으로 연결되지 않음
View
- 사용자 인터페이스를 나타내며, 사용자와 상호작용을 하는 구성 요소
- 데이터를 표시하고 사용자 입력을 ViewModel로 전달하는 역할
ViewModel
- View와 Model의 중개자 역할
- 뷰와 모델 사이의 통신을 중재하며 데이터 변환 및 가공을 담당
동작 과정 예시
사용자가 to-do 리스트 목록에 있다고 가정하면
- 사용자가 새로운 내용을 입력하고 추가 버튼을 클릭한다.
- View는 추가 버튼 클릭 이벤트를 ViewModel로 전달한다.
- 새로운 내용을 Model에 추가하는 로직을 실행한다.
- Model은 새로운 내용을 추가하고, Model의 변경 사항은 ViewModel에 알려진다.
- 뷰모델은 새로운 내용이 추가된 리스트를 다시 View에게 제공한다.
- View는 업데이트된 리스트를 화면에 표시한다.
그래서 대체 차이점이 무엇인가?
- MVC에서는 Controller가 Model과 View를 관리하며 Model과 View 사이의 직접적인 연결이 가능하고, Controller가 일부 비즈니스 로직을 처리한다.
- Model과 View 사이의 직접적인 연결이 가능하므로 단위테스트가 제한된다.
- Controller가 처리하는 비즈니스 로직 : 데이터가 변경되지 않는 선에서 정렬 및 필터링(정렬이나 검색), 예외 처리나 데이터 유효성 검사 등등
- MVP에서는 Presenter가 Model과 View를 관리하며 Model과 View 사이의 직접적인 연결을 방지하고, Model은 비즈니스 로직을 처리한다.
- MVVM에서는 ViewModel이 View와 Model을 관리하며 Data Binding을 사용하여 View와 ViewModel 간의 동기화를 자동화하며, ViewModel은 UI 관련 로직을 담당한다.
- Data Binding : 데이터와 View를 연결하는 작업을 Layout에서 처리하는 기술
Data Binding에 대한 설명은 이 블로그에서 설명을 진짜 잘해주셨다.
코틀린 데이터 바인딩(Data binding)
1. 데이터 바인딩 1-1. 데이터 바인딩이란? 1-2. 데이터 바인딩 vs 뷰 바인딩 2. 사용법 2-1. gradle 추가 2-2. 액티비티 2-3. 레이아웃 파일 1. 데이터 바인딩 1-1. 데이터 바인딩이란? // findViewById 쓸때는 이
todaycode.tistory.com
추가로 안드로이드에 적용시킨 MVC, MVP, MVVM 에 대한 설명은 이 블로그에 코드까지 적혀있다.
안드로이드 [Kotlin] - 아키텍처 패턴 with MVC, MVP, MVVM (feat 코드 예제)
MVP/MVVM/Clean Architecture 등 아키텍처 설계 혹은 적용 경험이 있으신 분 안드로이드 채용 공고를 보다 보면 어렵지 않게 볼 수 있는 글들이다. 오늘은 안드로이드 아키텍처패턴으로 많이 언급되는 MV
jminie.tistory.com
'Computer > Android' 카테고리의 다른 글
[Android] Coroutine과 Thread의 차이 (0) | 2023.09.04 |
---|---|
[Android] MVVM (0) | 2023.08.24 |
[52일차 Android] Socket 통신 (0) | 2023.07.27 |
[52일차 Android] 앨범에서 사진 가져오기 (0) | 2023.07.24 |
[52일차 Android] 사진 촬영하기 (0) | 2023.07.24 |