1 분 소요


MVC Pattern

MVC 패턴이란 Model, View, Controller 로 이루어진 디자인패턴이다. M, V, C 역할을 분리해서 코드를 관리하기 때문에 유지보수가 편해지고 개발 효율성이 높아진다.



MVC 구조

img1

용어

Model : 애플리케이션에서 사용되는 데이터와 이 데이터를 처리하는 부분이다.

View : 사용자에게 보여지는 UI 부분이다.

Controller : 사용자의 입력을 받고 처리하는 부분이다.

동작

  1. 사용자의 Action이 Controller로 들어온다.
  2. Controller는 사용자의 Action을 확인하고, Model의 값을 update한다.
  3. Controller 는 Model을 나타낼 View를 선택한다.
  4. View는 Model을 활용해서 화면을 랜더링한다.
  • View 가 update 되는 방법은 여러가지가 있다.
    • View가 Model을 이용해서 직접 update
    • Model에서 View에게 Nofity 하는 방법 (Observer Pattern)
    • View가 Polling으로 주기적으로 Model의 변경을 감지하는 방법

특징

  1. ControllerView 는 1:N 관계이다.
  2. Controller는 View를 직접 update 하지 않고 View 도 Controller를 알지 못한다.
  3. View와 Model 사이의 의존성이 높다. (단점)



MVP Pattern

MVP 패턴은 Model, View, Presenter 로 이루어진 디자인패턴이다. Model, View는 MVC 패턴과 동일하지만, Controller 대신에 Presenter가 존재한다.



MVP 구조

img1

용어

View : 사용자에게 보여지는 UI

Model : 애플리케이션에서 사용되는 데이터와 이 데이터를 처리하는 부분

Presenter : View에서 요청한 정보를 Model을 가공하여 View에게 전달하는 부분, View와 Model을 연결하는 역할을 한다.

동작

  1. 사용자의 Action이 View를 통해서 들어온다.
  2. View는 데이터를 Presenter에게 요청
  3. Presenter는 Model에게 데이터를 요청
  4. Model은 Presenter에게 요청받은 데이터를 응답
  5. Presenter가 View에게 데이터를 넘겨줌
  6. View는 Presenter가 준 데이터를 사용해서 화면을 랜더링

특징

  1. Presenter가 Model과 View의 인스턴스를 가지고 있고 이를 연결하는 역할을 한다.
  2. Presenter와 View는 1:1 관계

  3. MVC 패턴의 문제였던 View와 Model 사이의 의존성 문제는 해결되었다. 그렇지만 View와 Presenter 사이의 의존성이 높아졌다. (장단)



MVVM Pattern

MVVM 패턴은 Model, View, View Model 로 이루어진 디자인패턴이다. Model, View는 동일하고 ViewModel이 새로 생겼다.



MVVM 구조

img1

용어

Model : 애플리케이션에서 사용되는 데이터와 이 데이터를 처리하는 부분

View : 사용자에게 보이는 UI

View Model : View를 표현하기 위해 등장한 View를 위한 Model, View를 나타내는 Model이자 여기에 필요한 데이터 처리를 하는 부분

동작

  1. 사용자의 Action이 View를 통해 들어온다.
  2. Command 패턴으로 View Model에 Action을 전달

  3. View Model에서 Model에게 데이터를 요청
  4. Model에서 데이터 응답
  5. View Model에서 응답 데이터를 가공하여 저장
  6. View는 View Model 데이터를 Binding하여 화면을 랜더링

특징

  1. Command 패턴과 Binding 패턴이 사용되는 패턴이다.
  2. View와 View Model 사이의 의존성을 제거했다. (장점)
  3. View Model : View는 1:N 관계이다.

  4. View Model의 설계가 쉽지 않다. (단점)