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 패턴을 쉽게 구성할 수 있다
'개발일지' 카테고리의 다른 글
[Kotlin] Compose 입문 #1 - Column, Row, 컴포저블, 리스트 (0) | 2023.06.20 |
---|---|
[Kotlin] 형변환과 배열, 타입추론과 함수 (0) | 2023.04.19 |
[Android] Fragment 생명주기(Life-Cycle) (0) | 2023.04.17 |
[Android] Activity 생명주기(Life-Cycle) (0) | 2023.04.15 |
[Kotlin] 필드와 변수, 데이터 타입, 늦은 초기화 (0) | 2023.03.21 |