일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- effective stl
- operator new
- c++
- 메타테이블
- 상속
- 게임
- 영화 리뷰
- exception
- 참조자
- Vector
- 오블완
- 언리얼
- Effective c++
- 반복자
- 스마트 포인터
- 암시적 변환
- more effective c++
- 비교 함수 객체
- 루아
- resource management class
- UE4
- reference
- implicit conversion
- 예외
- 영화
- 다형성
- Smart Pointer
- 티스토리챌린지
- lua
- virtual function
- Today
- Total
스토리텔링 개발자
[Design Pattern] MVC, MVP, MVVM 본문
개요
디자인 패턴은 종류도 많고, 활용되는 범위도 천차만별인데요.
이번에 다뤄볼 디자인 패턴들은 프로젝트 전체 구조를 관통하는 패턴들입니다.
프로젝트의 큰 틀을 기능별로 묶어서 좀 더 편하게 관리하기 위해서 사용하죠.
자주 언급되는데 비해 이들의 차이가 명확하지 않은 것 같아 정리해 보았습니다.
MVC(Model, View, Controller)
MVC는 전통적인 패턴입니다. 알음알음 많이 들어본 패턴 이름이죠.
단적으로는 '안드로이드' 프로젝트가 바로 이 패턴의 구성을 띠고 있습니다.
MVC의 특징
MVC는 뷰, 모델을 분리하는 것에 중점을 두고 있습니다.
그리고 그 분리를 컨트롤러가 관장하는 구조입니다.
이 형태의 단점은 컨트롤러의 기능이 비대해질 가능성이 크다는 점입니다.
컨트롤러를 통해 모델과 뷰를 조작하려면 필연적으로 컨트롤러에 기능을 추가해야 하기 때문입니다.
그럼 다음으로 각각의 요소를 순서대로 알아보도록 하겠습니다.
Model
데이터, 혹은 데이터를 컨트롤하는 기능입니다.
DB, Preference, xml 데이터 등등 데이터를 포함하는 데이터 관리 기능의 통칭이라고 할 수 있습니다.
View
사용자에게 노출되는 비주얼을 담당하는 부분입니다.
안드로이드에서 UI 구성을 저장한 xml, 언리얼 엔진에서 UMG를 포함한 uasset 파일 등이 있습니다.
Controller
모델과 뷰를 가로지르는 다리 역할의 통칭입니다.
안드로이드를 예로 들면 Activity 하위 클래스들,
사실상 프로젝트를 구성하기 위해 만들어내는 대부분의 코드들을 의미합니다.
MVP(Model, View, Presenter)
MVC와 비슷하지만 뷰와 프레젠터를 좀 더 세분화하였습니다.
MVP의 특징
뷰와의 복잡도를 해소했습니다.
뷰는 프레젠터가 제공하는 인터페이스에 따라 각각 자신의 로직을 담당합니다.
그리고 프레젠터는 추상화된 인터페이스(혹은 여타 다른 방법)를 통해 뷰로 데이터를 전달합니다.
뷰는 프레젠터가 전달해주는 데이터를 사용하여 자신을 갱신합니다.
이를 통해 MVC의 컨트롤러가 가지던 복잡도를 조금 해소할 수 있습니다.
(컨트롤러 - 뷰의 결합도를 줄일 수 있습니다.)
Model
데이터, 그리고 데이터를 컨트롤하는 기능입니다.
MVC와 동일합니다.
View
사용자에게 노출되는 비주얼을 담당하는 기능 및 로직입니다.
안드로이드에서 UI 구성을 저장한 xml, 언리얼 엔진에서 UMG를 포함한 uasset 파일 등
그리고 UI를 구성하는 런타임 로직들을 포함합니다.
Presenter
모델과 뷰를 가로지르는 다리 역할의 통칭입니다.
MVP에서는 뷰가 자신의 변경 로직을 담당하게 되었고, 프레젠터는 뷰 변경을 위한 데이터만 제공하는 역할입니다.
MVVM(Model, View, ViewModel)
기존 MVC, MVP가 모델 업데이트에 대한 권한을 가지던 것에 비해
그 기능을 모델로 완전히 넘겨주고, 뷰모델이 뷰의 확장된 기능을 맡는 식으로 변화되었습니다.
MVVM의 특징
MVP에 더해 모델의 복잡도를 해소합니다.
모델이 자체적으로 로직을 담당하고 데이터만 전달합니다.
뷰모델은 모델의 데이터를 여러가지 방법으로 획득해서
(제공되는 인터페이스를 사용하거나, 구독(subscribe) 방식을 사용하거나 기타 등등)
런타임 뷰를 업데이트 해줍니다.
즉, MVVM의 뷰-뷰모델은 MVP의 뷰를 정적, 동적으로 분리해둔 형태라고 할 수 있습니다.
Model
데이터, 그리고 데이터를 컨트롤하는 기능입니다.
기존 MVC, MVP가 각각 컨트롤러, 프레젠터가 모델 변경 권한을 가지고 있었다면,
이번엔 모델이 자체적으로 관리합니다.
(즉 비즈니스 로직을 모델 자체가 가집니다.)
View
사용자에게 노출되는 비주얼을 담당하는 기능입니다.
뷰모델에 데이터 바인딩 되어 있어, 모델 데이터 변경 시 표시를 변경합니다.
수동적인 형태의(정적인) 뷰만을 담당하고, 런타임 시 변경되는 로직에 관해서는 뷰모델에 의존합니다.
ViewModel
모델의 변화를 감지하여 뷰를 재구성하는 기능입니다.
모델이 전달해주는 데이터를 기반으로 뷰를 런타임 재구성합니다.
추상화된 뷰의 역할을 수행합니다.
'개발 > 디자인 패턴' 카테고리의 다른 글
[Design Pattern] 데이터 바인딩(Data Binding) (0) | 2021.09.10 |
---|