[용어 정리] MVC, MVP, MVVM 비교


[용어 정리] MVC, MVP, MVVM 비교

  • 개발을 하기 위한 프레임워크 패턴들을 정리
    • 종류로는 웹 개발시 많이 쓰이는 MVC부터 시작해서 파생되어 나온 MVP, MVVM, Viper등등이 있음
  • 이 많은 프레임워크 패턴들의 공통적인 특징이자 장점
화면에 보여주는 로직과 실제 데이터가 처리 되는 로직을 분리
  • 그냥 분리하지 않고 처리하면...... 엄청 복잡해짐

MVC (Model + View + Controller)

Model : 프로그램에서 사용되는 실제 데이터 및 데이터 조작 로직을 처리 하는 부분
  • Model은 프로그램에서 사용되는 실제 데이터 및 데이터 조작 로직을 처리하는 부분
View : 사용자에게 제공되어 보여지는 UI 부분
  •  View는 실제 사용자가 눈으로 보고 있는 화면
Controller : 사용자의 입력을 받고 처리하는 부분
  • Controller는 사용자의 입력을 받은 다음 해당 작업을 처리하는 부분

정리
  1.  Controller로 사용자의 입력이 들어옴
  2.  Controller는 Model을 데이터 업데이트 및 불러옴
  3.  Model은 해당 데이터를 보여줄 View를 선택해서 화면에 보여주게 됨
MVC의 단점 : View와 Model이 서로 의존적
MVC의 단점을 없애기 위해 나온것이 MVP패턴


MVP (Model + View + Presenter)

  • MVP의  Model과 View는 위의 사진과 같다.
Presenter : View에서 요청한 정보를 Model로부터 가공해서 View로 전달하는 부분
    • Model과 View는 MVC와 동일하지만 사용자 입력을 View에서 받음
    • 그리고 Model과 View는 각각 Presenter와 상호 동작을 하게 됨
    • 항상 Presenter를 거쳐서 동작
      • 그러므로 View와 Model은 서로를 알 필요가 없음. Presenter만 알면 됨
      • 그래서 MVC의 단점인 View와 Model의 의존성이 없어짐

    정리
    1. View로 사용자의 입력이 들어옴
    2. View는 Presenter에 작업을 요청 함
    3. Presenter에서 필요한 데이터를 Model에 요청
    4. Model은 Presenter에 필요한 데이터를 응답
    5. Presenter는 View에 데이터를 응답 함
    6. View는 Presenter로부터 받은 데이터로 화면에 보여주게 됨
    MVP의 단점 : View와 Model의 의존성이 없는 대신 View와 Presenter가 1:1로 강한 의존성을 가짐
    이런 단점을 해결할 또 다른 프레임워크가 바로 MVVM


    MVVM(Model + View + ViewModel)

    • Presenter대신 ViewModel이 존재
    ViewModel : View를 표현하기 위해 만들어진 View를 위한 Model
      • MVVM은 두가지 디자인 패턴을 사용
        • Command패턴, Data Binding 
        • 이 두가지 패턴으로 인해 View와 View Model은 의존성이 완전히 사라짐
      • MVP와 마찬가지로 View에서 입력이 들어옴.
        • 입력이 들어오면 Command패턴을 통해 ViewModel에 명령을 내리고
        • Data Binding으로 인해 ViewModel의 값이 변화하면 바로 View의 정보가 바뀜

      정리
      1. View에 입력이 들어오면 Command패턴으로 ViewModel에 명령을 함
      2. ViewModel은 필요한 데이터를 Model에 요청
      3. Model은 ViewModel에 필요한 데이터를 응답
      4. ViewModel은 응답 받은 데이터를 가공해서 저장
      5. View는 ViewModel과의 Data Binding으로 인해 자동으로 갱신


      출처

      댓글

      이 블로그의 인기 게시물

      [Python] # -*- coding: utf-8 -*-를 쓰는 이유

      [소프트웨어공학] NS(Nassi-Schneiderman) 차트

      [컴퓨터네트워크] Telnet이란?