티스토리 뷰
[JAVA/Android] Android Architecture Components - MVVM, MVP, Clean 아키텍쳐 비교
RosyPark 2020. 9. 18. 15:05* 안드로이드 아키텍쳐 컴포넌트( Android Architecture Components)
- Android Architecture Components , AAC
- 앱 구조를 튼튼하고 테스트에 용이하고 유지보수성에 뛰어나게 만들어주는 라이브러리 모음
- 모듈화된 코딩을 위해 Databinding, LiveData, ViewModel 등의 라이브러리 제공
- 안드로이드 기술 스펙 관련 정보 깃허브
1. MVVM 패턴이란?

- 안드로이드 개발을 시작한 사람은 처음부터 데이터를 Activity에 넣음, 하지만 시간이 지나갈수록 Activity가 점점 무거워지기 때문에 수정이나 유지 보수가 필요함 -> 그렇기 때문에 MVVM 패턴의 필요성이 대두된다.
- MVVM 패턴이란? View - ViewModel - Model을 사용하여 각각의 역할을 분리하여 가독성과 재 사용성을 높인다.
- MVVM의 장점?
(1) View가 데이터를 실시간으로 관찰하기 때문에 LiveData, 즉 Observble 패턴을 사용하여 데이터베이스를 관차라고 자동적으로 UI를 갱신
(2) 생명주기로부터 안전 , View 모델을 통해 데이터를 참조하기 때문에 Activity/ Fragment 생명주기를 따르지 않음
(3) 역할분리 및 모듈화가 되어 있기 때문에 역할별로 정리하기가 좋음
<MVVM의 구성요소>
(1) View - 뷰
- UI를 담당하는 Activity나 Fragment
- 화면에 어떤것을 그릴지 결정하고 상호작용하는 것
- 보동 데이터의 변화를 감지하기 위해 Observer를 가짐
- 단순히 데이터를 뿌리기만 해야하기 때문에 로직이나 데이터 모델이 들어가선 안됨
(2) ViewModel - 뷰모델
- UI 를 위한 데ㅣ터를 가짐, 구성이 변경되어도 살아남음
- 뷰 모델은 뷰와 분리되기 때문에 Activity가 Destroy되도 다시 Create 되어도 종료되지 않고 데이터를 여전히 가지고 있음
- View에 관련된 비지니스 로직이 이곳에 들어감
(3) LiveData - 라이브데이터
- 관찰(Observable)이 가능한 Dataholder class, 뷰에서 뷰모델의 LiveData를 관찰하게 되면 데이터가 변경될때 내부적으로 자동적으로 알려주게 됨. 그리고 LiveData는 Activity나 Fragment의 생명주기를 인지
- Activity가 화면위에 활성화 되어 있을 때만 UI 변경 등의 기능동작, Destroy된 상태에서는 동작하지 않기 때문에 Memory의 leak 발생을 줄여줌
(4) Repository - 리포지토리
- 뷰 모델과 상호작용하기 위해 잘 정리된 데이터 API를 들고 있는 클래스
- 앱에 필요한 데이터, 즉 내장 데이터 베이스나 외부 웹 서버 데이터 등에서 데이터를 가져옴
- DB나 서버에 직접 접속하지 않고 Repository에 직접 접근
(5) Room - 룸
- SQLite의 코드를 직접 작성하는 경우, 직접 테이블을 Create하거나 쿼리문을 일일이 변수에 저장해야했지만 Room을 쓰면 좀더 직관적이고 편리한 DB 사용
안드로이드 웹 페이지를 가보면 Declaring dependencies에 LifecycleComponents 존재
https://developer.android.com/topic/libraries/architecture/adding-components
프로젝트에 구성요소 추가 | Android 개발자 | Android Developers
Issue Tracker 버그를 수정할 수 있도록 문제를 신고해 주세요. 시작하기 전에 아키텍처 구성요소 앱 아키텍처 가이드를 읽어보는 것이 좋습니다. 이 가이드는 모든 Android 앱에 적용되는 유용한 원��
developer.android.com

Pre-AndroidX Dependencies에 존재 View Model과 LiveData를 같이 쓸수 있는 gradle 설치 (implementation)
def lifecycle_version = "1.1.1"
// ViewModel and LiveData
implementation "android.arch.lifecycle:extensions:$lifecycle_version"
2. MVP 패턴
3. MVC 패턴이란?
Model, View, Controller
- Model - 데이터의 형식을 지정하고 저장하고 불러오는 작업들에 관한 코드, Model 데이터를 View에 연결한다.
- View - HTML ,css .. JSP
- Controller - Serblet
4. Clean 아키텍쳐
- Uncle Bob이 2012년 엔터프라이즈 아키텍쳐에서 논의 되던 내용을 집약시킨것
- 변화에 잘 대응할 수 있는 코드
- 화면에 보여주는 뷰의 생명주기를 액티비티에서 관리
- Clean Architecture -> UI를 독립시키고 Database를 분리시키고, 외부 적인 설정에 독립적인 구조 적용, 프레임워크에 의존적이지 않은 코드 짤 수 있고 테스트가 가능한코드 짤 수 있음
- Presentation Layer -> 4개의 사용자에게 보여지는 로직
- Data Layer -> 네트워크를 포함한 데이터를 가져오는 레이어
- Domain Layer -> 사용자의 유스케이스로 분리되는 레이어
- Entity Layer -> 사용자의 개념 정의
'Programming > Android' 카테고리의 다른 글
[Android/Jetpack] DataBinding (0) | 2020.09.18 |
---|---|
[Android/Jetpack] Navigation (safe args를 사용한) (0) | 2020.09.18 |
[Android] 안드로이드 백그라운드 작업 (0) | 2020.09.03 |
[Android] android class 정리 (0) | 2020.08.31 |
[Android] 안드로이드 WebRTC 주의사항 (0) | 2020.08.25 |