본문 바로가기

개발일지

[Android] Android Architecture Pattern

MVC, MVP, MVVM 패턴 등 ... 검색을 하면 디자인 패턴이라고 하기도, 아키텍처 패턴이라고 하기도 한다

 

디자인 패턴(Design Pattern)

: 소프트웨어 디자인에서 공통적으로 발생하는 문제에 대해 재사용 가능한 해결책

: 문제들을 해결하는 데 상황에 맞게 사용될 수 있는 해결책 템플릿을 의미한다

: 프로그래머가 애플리케이션, 시스템을 디자인할 때 공통적인 문제들을 해결하는데 쓰이는 형식화된 패턴

 

아키텍처 패턴(Architecture Pattern)

: 디자인 패턴과 유사하지만 범위가 더 넓으며, 소프트웨어 공학의 다양한 문제를 해결한다

: 일부 아키텍처 패턴은 SW 프레임워크 안에 구현되어 있다

: 아키텍처 패턴은 시스템의 이미지를 전달하긴 하지만 아키텍처 자체를 의미하지는 않는다

: 다양한 아키텍처가 동일한 패턴을 구현하고, 관련 특성을 공유할 수 있다

ex ) 컴퓨터 하드웨어 성능 제한, 비즈니스 위험의 최소화와 고 가용성 등

 

디자인 패턴 VS 아키텍처 패턴

공통적으로 소프트웨어 공학에서 발생하는 문제를 해결하지만,

디자인 패턴은 특정한 문제를 해결하기 위한 방법

아키텍처 패턴은 전체적인 소프트웨어에서 발생하는 문제들을 해결하기 위한 방법

 

 

 

MVC(Model - View - Controller)

 

Model (모델)

: 애플리케이션의 데이터를 저장하는 역할

-> SQLite, Room, File, Content Provider

 

View (뷰)

: 화면 구성을 담당하는 영역

 

Controller (컨트롤러)

: View와 Model을 서로 연결하고 제어하는 영역

-> activity, service, broadcast receiver, fragment

 

 

장점

구현하기 쉽다

단점

하나의 클래스에 코드 양 증가

View와 Model 간의 의존성 증가

-> 기능을 추가하거나 유지보수 하기 어려움

 

MVC 정리

: 간단한 프로젝트 진행에는 적합하나, 프로젝트 규모가 커지고 메서드 개수가 많아지면 코드 파악이 어려워짐

: 즉, 메서드와 클래스를 적절히 분리하며 복잡도를 관리해야 한다

 

 

 

MVP (Model - View - Presenter)

Model (모델)

: 데이터와 관련된 처리 담당

-> MVC의 Model과 동일

 

View (뷰)

: 이벤트가 발생하면 Presenter로 알린 후 반환 받은 것으로 UI를 갱신

 

Presenter (프레젠터)

: View에서 전달받은 이벤트를 처리하여 View로 다시 반환

: Model에 데이터 요청이 필요한 이벤트가 들어오는 경우 -> Model에 요청한 후, 받은 데이터를 View에 전달

 

장점

: View와 Model 사이의 의존성을 낮출 수 있다

단점

: View와 Presenter는 1:1로 매칭되므로 의존성이 높아진다

 

MVVM (Model - View - View Model)

Model (모델)

: 데이터와 관련된 처리 담당

: 데이터가 변경되면, ViewModel을 거쳐서 View로 전달된다

: 안드로이드에서는 LiveData, RxJava 등을 통해 구현할 수 있다

 

View (뷰)

: 화면에 표현되는 레이아웃 관리

: View는 Model을 알지 못하므로, View Model을 옵저빙하다가 상태에 변화가 생기면 전달된 상태를 통해 화면 갱신

 

View Model (뷰 모델)

: View에 연결할 데이터와 명령으로 구성되어 있으며, 변경 알림으로 View에 상태 변화를 전달한다

: View Model은 Model은 알지만 View는 모른다

 

장점

: UI 컨트롤러의 책임을 분담하여 클래스가 커지는 것을 막음 -> 유지보수와 재사용성, 테스트 등에 용이하다

단점

: View Model의 설계가 어렵고 Data Binding 등의 추가적인 공부가 필요하다

 

MVVM 정리

: MVVM 모델을 구현하려면 데이터 바인딩(Data Binding)을 같이 써야 의존성을 낮출 수 있다

: 구글이 제공하는 AAC(Android Architecture Component)를 사용해 MVVM 패턴을 쉽게 구성할 수 있다