본문 바로가기

개발관련

MVC(Model-View-Controller), MVP(Model-View-Presenter), MVVM(Model-View-ViewModel)

반응형

참고 및 출처 링크 :
출처 - Link
참고
- Link 1
- Link 2
- Link 3
- Link 4

MVC (Model - View - Controller)

- 아키텍처의 최상위에 View가 있고 그 아래 Controller가 있고 그 아래 Model이 있습니다. 때문에 View는 Controller만 알고 있고 Controller는 Model을 알고 있습니다. 모델이 변경되었을 때 View는 Controller를 통해서 통보를 받습니다. (Controller가 데이터 처리를 통해 View를 넘겨(변경해) 줍니다.)

 

MVP (Model - View - Presenter)

- MVC에서 Controller가 Presenter로 교체된 형태이고 Presenter는 View와 같은 레벨에 있습니다. Presenter는 View와 Model의 이벤트를 모두 받으면서 둘 사이의 상호작용을 조정합니다.

 

MVVM (Model - View - ViewModel)

- MVC에서 Controller가 ViewModel로 교체된 형태이고 ViewModel은 UI레이어 아래에 위치합니다. viewModel은 View가 필요로하는 데이터와 커맨드 객체를 노출해 주기 때문에 View가 필요로하는 데이터와 액션을 담고
있는 컨테이너 객체로 볼 수 있습니다.

 

 

MVVM은 왜 다른가?

MVVM이 MVC와 다른점은 ViewModel은 View를 지원하고 View가 필요한 데이터와 커맨드를 제공하기 위해서 만들어졌다는 것입니다. 이름 그대로 ViewModel은 View를 위한 Model이며 ViewModel은 View에 바인딩할때 가장 강력합니다. 여러가지 View를 제공하는 일반적인 객체가 아닌 각 View에 맞춰서 만들어진 것입니다. 때문에 View는 ViewModel에 대해서만 알고 있으면 되고 그 이외의 아키텍처에 대해서는 신경쓰지 않아도 됩니다.

 

그래서 MVC와 가장 다른 점은 커맨드와 데이터바인딩이라고 할 수 있습니다. 이 2가지 요소로 인하여 View와 Controlelr(MVVM에서는 ViewModel)의 관계를 끊을 수 있습니다. 커맨드를 사용함으로써 behavior를 ViewModel에서 정의한 특정한 View Action과 연결 할 수 있습니다. 데이터바인딩 특정한 View 속성과 ViewModel의 속성을 연결할 수 있도록 하고 ViewModel에서 속성이 변경되었을 때 View에 반영이 됩니다.

---------------------------------------------------------------------------------------------------------------------------------------------------

MVC, MVP, MVVM에 대해서 더 세부적인 설명

 

1.MVC (Model - View - Controller)

모든 입력은 Controller 에서 처리된다. 입력이 Controller로 들어오면 Controller는 입력에 해당하는 Model을 조작(업데이트)하고, Model을 나타내어줄 View를 선택한다.

Controller는 View를 선택할수 있기 때문에 하나의 Controller가 여러개의 View를 선택하여 Model을 나타내어 줄 수 있다.

이때 Controller는 View를 선택만하고 업데이트를 시켜주지 않기때문에 View는 Model을 이용하여 업데이트 하게된다.

Model을 직접 사용하거나 Model에서 View에게 Notify해주는 방법, View에서 Polling을 통해 Model의 변화를 알아채는 방법등이있다.

이와 같이, View는 Model을 이용하기 때문에 서로간의 의존성을 완벽히 피할 수 없다는 단점이 있고, 좋은 MVC 패턴이라 함은 View와 Model간의 의존성을 최대한 낮게한 패턴이 좋은 패턴이라 할 수 있다.

 

2. MVP(Model - View - Presenter)

MVC 패턴과 다르게 입력이 View에서 처리된다. Presenter는 View의 인스턴스를 갖고 있으며 View와 1대1 관계이고, 그에 해당하는 Model의 인스턴스 또한 갖고 있기때문에 View와 Model 사이에서 다리와 같은 역할을 한다. View에서 이벤트가 발생하면 Presenter에게 전달해주고 Presenter는 해당 이벤트에 따른 Model을 조작하고 그 결과를 바인딩을 통해 View에게 통보를 하여 View를 업데이트 시켜준다. MVC 패턴과는 다르게 Presenter를 통해 Model과 View를 완벽히 분리해 주기 때문에 View는 Model을 따로 알고 있지 않아도 된다는 장점이 있다. 단점으로는 View와 1대1 관계이기 때문에 View와의 의존성이 매우 강하다.

 

3. MVVM(Model - View - ViewModel)

ViewModel 뷰모델 말그대로 View를 나타내주기 위한 Model이라고 생각하면 된다. View보다는 Model과 유사하게 디자인 되며, View의 바인딩 될 때 가장 강력하다.

MVP와 같이 View에서 입력이 처리된다.

MVVM 패턴의 가장 큰 장점이라 함은 Command와 Data Binding으로 MVP 패턴과 달리 View와의 의존성을 완벽히 분리 할 수 있다는 장점이 있다.

Command를 통하여 Behavior를 View의 특정한 ViewAction(Event)와 연결할 수 있으며, ViewModel의 속성과 특정 View의 속성을 Binding 시켜 줌으로써 ViewModel 속성이 변경 될때마다 View를 업데이트 시켜줄 수 있다.

출처: http://hackersstudy.tistory.com/71 [공대인들이 직접쓰는 컴퓨터공부방]

반응형