반응형
1. 디자인 패턴이란?
객체 지향 프로그래밍을 설계할 때 자주 발생하는 문제에 대응하기 위해서 사용되는 패턴을 의미한다.
어떻게 보면 개발하는 방법을 공식화한 것이라고 생각하면 된다.
2. 종류
1. MVC
1. 구성요소
View | Model | Controller |
사용자에게 보여지는 UI Model로부터 data를 받아 사용자에게 보여준다. |
어플리 케이션에서 사용되는 data와 그 data 처리 View에 의존적이지 않기 때문에 재사용이 가능하다. |
사용자의 입력을 받고 처리한다. 주로 Activity나 Fragment로 표현된다. Model의 data 변화에 따라 View를 선택한다. |
2. 동작
- 사용자의 Action이 Controller에 들어온다.
- Controller는 사용자의 Action을 확인하고, Model을 업데이트한다.
- Controller는 Model을 나타내 줄 View를 선택한다.
- View는 Model을 이용하여 화면을 나타낸다.
3. 특징
- Controller는 여러 개의 View를 선택할 수 있는 1:N 구조이다.
- Controller는 View를 선택할 뿐 직접 업데이트하지 않는다. - View는 Controller를 모른다.
- View와 Model을 완벽하게 분리하고, Model 테스트가 용이하다.
2. MVP
1. 구성요소
View | Model | Presenter |
기본적인 것들은 MVC와 동일하나, Activity/Fragment가 View에 포함된다. View를 관리하는 Interface를 추가하여 Presenter를 독립적으로 만들어 준다. |
어플리 케이션에서 사용되는 data와 business logic을 처리한다. View에 의존적이지 않기 때문에 재사용이 가능하다. |
View와 Model 사이에서 data를 가공하고 전달하는 역할을 수행한다. View가 요청한 정보를 Model로부터 받고 가공하여 View에게 전달한다. Controller와의 차이점은 Interface라는 점이다. |
2. 동작
- 사용자의 Action이 View를 통해 들어온다.
- View는 data를 Presenter에게 요청한다.
- Presenter는 Model에게 data를 요청한다.
- Model은 Presenter에게 요청받은 data를 반환한다.
- Presenter는 View에게 data를 반환한다.
3. 특징
- Presenter는 View와 Model의 인스턴스를 가지고 있어 둘을 연결하는 역할을 한다.
- Presenter와 View는 1:1 관계이다.
- 단순 Interface이기 때문에 테스트가 용이하고 모듈화/유연성 문제가 해결되었다.
3. MVVM
1. 구성요소
View | Model | ViewModel |
기본적인 것들은 MVC와 동일하나, Activity/Fragment가 View에 포함된다. ViewModel을 관찰하여 UI를 갱신한다. Data Binding을 위해 gradle과 xml을 수정해야 한다. 이를 통해 View는 ViewModel에 의해 Model과 유연한 binding이 가능하게 된다. |
MVC, MVP와 동일하다. 기존 모델에 business logic을 추가하기 위해 MVVM에 SquareParams라는 Model을 추가했다. DB 사용이나 Retrofit을 통한 백엔드 API 호출 등을 주로 수행한다. |
기본적으로 View에 종속되지 않는다. Model을 래핑하고 View에 필요한 Observalbe data를 준비한다. View가 Model에 Event를 전달할 수 있도록 Hook(BindingAdatper)를 준비한다. |
2. 동작
- 사용자의 Action들은 View를 통해 들어오게 된다.
- Command pattern으로 ViewModel에 Action을 전달한다.
- ViewModel은 Model에게 data를 요청한다.
- ViewModel은 응답받은 data를 가공하여 저장한다.
- View는 ViewModel과 Data Binding 하여 화면을 나타낸다.
3. 특징
- Command Pattern과 Data Binding을 사용하여 구현한다.
- View와 Model 사이의 의존성이 없다.
- View와 ViewModel 사이의 의존성도 없다.
- 위처럼 모든 부분이 독립 적으므로 모듈화가 가능하다.
4. 장단점 비교
MVC | MVP | MVVM | |
장점 | 구현하기가 쉬워 빠르게 작업이 가능 | Model과 View의 의존성이 존재하지 않는다. Model은 Presenter의 요청만을 수행한다. |
View와 Model이 독립되어 있다. ViewModel에서 View 코드가 없기 때문에 UnitTest를 쉽게할 수 있다. |
단점 | Controller/View가 결합되어 있어 테스트가 힘들다. 기능을 추가할수록 Activity 코드가 비대해지기 때문에 관리가 더욱 어려워진다. Model과 View의 의존성이 높다. |
MVC에 비해 필요한 클래스 수가 증가한다. View와 Presenter의 1:1 관계로 인해 의존성이 증가한다. 기능이 추가될수록 Presenter가 커지므로 분리하기 힘들다. |
데이터 바인딩이 필수적으로 요구된다.(Compose는 안해도 된다.) View에 대한 처리가 복잡할수록 ViewModel이 거대해진다. |
디자인 패턴의 이론을 위주로 정리를 해봤는데 글이 너무 많아서 그런지 이번 포스팅은 좀 재미가 없는 것 같네요.
하지만 주제만큼은 매우 중요하다고 할 수 있습니다.
이 디자인패턴을 실제로 적용해 보는 예제는 따로 올려보도록 하겠습니다.
앞으로 개발을 할 때 최대한 잘 적용을 해보도록 노력하려고 합니다.
끝!
반응형
'안드로이드' 카테고리의 다른 글
[Android] 핸들러(Handler) (0) | 2024.05.09 |
---|---|
[Android] MVC 패턴 예제! (0) | 2024.05.04 |
[Android] SharedPreferences, 간단한 정보 저장/불러오기 (0) | 2024.04.30 |
[Android] AAC Room 사용해보기 (0) | 2024.04.25 |
[SCRCPY] 안드로이드 기기 USB, WIFI를 통한 미러링 , 다중 미러링 (1) | 2024.04.03 |