Architecture Pattern ?
- 소프트웨어에서 발생하는 문제들을 해결하기 위한 방법
일반 아키텍처 원칙
Android 앱은 크기가 커지기 때문에, 앱을 확장하고 앱의 견고성을 높이며 앱을 더 쉽게 테스트할 수 있도록 아키텍처를 정의하는 것이 중요합니다.
- 관심사 분리 (Separation of concerns)
- UI 기반 클래스는 UI 및 운영체제 상호작용을 처리하는 로직만 포함해야 합니다.
- UI 기반 클래스를 최대한 가볍게 유지하여 LifeCycle과 관련된 많은 문제를 피하고, 테스트 가능성을 개선할 수 있습니다.
- 데이터 모델에서 UI 도출하기(Drive UI from data models)
- 데이터 모델, 즉 앱의 데이터 나타냅니다.
- 앱의 UI 요소 및 기타 구성요소와 독립되어 있습니다.
- 앱 아키텍처를 데이터 모델 클래스에 기반하는 경우 앱의 테스트 가능성과 견고성이 더 높아집니다.
MVC 패턴
Model, View, Controller
모든 입력은 Controller 에서 발생하고 관리함
프로그래밍 시 가장 널리 사용되는 구조 중 하나
Model
- 데이터를 가짐
- 애플리케이션에서 사용되는 데이터와 이를 처리함
View
- 사용자에게 보일 화면을 표현함
Controller
- 사용자로부터 입력을 받고, 이를 모델에 의해 View를 정의함
- 모델의 데이터 변화에 따라 뷰를 정의함

사용자 Action 순서
- Controller : 사용자 이벤트 발생
- Controller : 이벤트에 따른 갱신이 필요한지 Model 확인
- Model : 데이터 갱신이 필요하면 이벤트 발생
- View : Model 또는 Controller 로부터 갱신 필요 여부 이벤트를 받음
- View : Model에서 실제 필요한 데이터를 받아와 View 갱신

안드로이드에서의 MVC는?
-> View, Controller가 Activity & Fragment 와 같은 View에 포함됨
(ex. setOnClickListener 등과 같은 이벤트)
- Activity : 사용자 이벤트 발생
- Model로부터 데이터 갱신 필요 여부 확인
- Model로부터 전달받은 데이터를 통해 View 갱신 여부 판단
- View에서 UI 갱신 처리

MVC 패턴의 패키징 예시
📂com.example.MVC
┣ 📂db
┣ 📂network
┣ 📂ui
┃ ┣ 📂main
┃ ┣ 📂search
┃ ┣ 📂review
┗ 📂utils
- Model :
DB, API, SharedPreference, ~~Model(Data) 등
데이터 파일과 데이터 처리 관련 로직
- View & Controller :
Activity, Fragment 등 UI 로직
--> 사용자의 입력 + 뷰의 갱신 변화 와 데이터 처리 의 분리
MVC 패턴의 장단점
장점
- 개발 기간이 짧음
단점
- 코드 양의 증가
- 복잡도 증가
- 유지보수 어려움
- 테스트 코드 작성 어려움
- View와 Model의 결합도가 높음
(View에서 Model을 직접 호출하여 사용하기 때문)
Example
MovieReview Example with Naver API - hyooosong github
Reference
Android MVP 무작정 따라하기 - MVC 구조 이해하기 |
안드로이드 아키텍처 패턴 - MVC가 뭘까?
developer.android.com - 앱 아키텍처 가이드