1. 디자인 패턴 ( Design Pattern ) 이란?
개발자들이 여러 방식을 통해 소프트웨어 설계에서 얻은 경험들을 기록해 놓도록 하는 것을 의미한다.
여기서 말하는 개발자들은 소수의 매우 뛰어난 엔지니어들을 말하며 이들이 해결한 문제를 다수의 엔지니어들이 처리 할 수 있도록 규칙을 만들어 개발자간의 소통이 원활할 수 있게 도와주는 기법이다.
2. 디자인 패턴의 종류
디자인 패턴의 종류는 매우 많다. 일반인들도 자신만의 설계 법이 있다면 이러한 방법도 디자인 패턴의 일부가 되는 것이다.
수많은 패턴 중에서도 Android에서 사용되는 대표적인 패턴에는 MVC, MVP, MVVM 이 3가지를 주로 사용한다.
( 출처 : https://tomyrhymond.wordpress.com/2011/09/16/mvc-mvp-and-mvvm/ )
1) MVC ( Model - View - Controller )
php의 framework인 codeIgniter 와 Java의 Spring framework에서 MVC패턴이 주로 사용된다.
View
View는 Controller의 존재를 알 수 없다.
View는 다 : 다 형태로 Controller와 연결될 수 있다.
View는 Model에 의해 업데이트 된다.
Controller
사용자에 의한 모든 입력 ( 터치, 클릭 등 ) 은 Controller에 직접 전달된다. Controller는 View를 선택할 수 있기 때문에 single Controller가 여러개의 View를 선택하여 데이터를 표현할 수 있다.
이때 Controller는 View를 선택하기만 할 뿐 직접적으로 데이터를 전달하고 업데이트하지 않고 Model을 통해 View를 업데이트 한다.
Model
Model은 Controller로 부터 받은 사용자의 이벤트를 통해 View의 내용을 업데이트한다. 따라서 View는 전적으로 Model에 의존적인 형태이다.
-> MVC 패턴은 이처럼 View와 Model 간의 의존성을 완벽히 피할 수 없다는 단점이 존재한다. 이러한 View와 Model간의 의존성을 최대한 낮게 구현할 수록 좋은 MVC 패턴이라 할 수 있다.
2) MVP ( Model - View - Presenter )
// 추후 업로드 예정
3) MVVM ( Model - View - ViewModel )
Android의 Activity 특성 상 MVC 패턴보다는 MVP 또는 MVVM 패턴이 적합하다고 한다. 그 중에서도 주로 MVP 패턴을 이용하고 있었는데 최근에 Data binding 관련 라이브러리가 나오면서 MVVM을 이용한 개발이 늘어나고 있다.
Model
데이터 모델로서 다양한 로직들이 존재한다.
View
화면에 보여지는 구조, 레이아웃, View의 형태에 대해 정의되어 있다.
MVP와 마찬가지로 View에서 사용자의 입력이 처리된다.
( 주로 Activity가 해당되는듯 )
ViewModel
ViewModel은 View와 Model의 사이에서 서로를 연결시켜주는 역할을 한다.