Study/기술 및 용어 정리

[디자인패턴] MVC, MVP, MVVM 개념과 비교

토기발 2023. 7. 15. 17:40

자바로 프로젝트를 할 때 가장 많이 사용했던 패턴이자 가장 유명한 패턴은 MVC패턴이었다. 그런데 MVC패턴 말고도 여기서 파생된 다른 패턴들이 있다. 오늘은 MVC, MVP, MVVM 패턴의 개념을 정리하고 비교해보기로 한다.

 

 

MVC (Model+View+Controller)

  • Model :  모델은 애플리케이션의 데이터와 비즈니스 로직을 담당한다. 데이터베이스와 상호 작용하거나 데이터를 조작하는 작업들이 이곳에서 처리된다.
  • View : 뷰는 사용자에게 데이터를 시각적으로 표현하는 부분으로, 주로 사용자 인터페이스를 담당한다. 사용자의 입력을 받아 컨트롤러에 전달하거나 모델로부터 받은 데이터를 사용자에게 보여준다. 
  • Controller :  컨트롤러는 사용자 입력을 받아 해당하는 모델을 호출하고, 결과 데이터를 받아 뷰를 업데이트한다. 사용자와 상호 작용하는 부분을 담당하며, 뷰와 모델을 중재하는 역할을 수행한다. 뷰와 모델 사이의 의존성을 없애기 위해 컨트롤러가 중간에서 데이터를 처리하고 제어하는 역할을 한다.

 

소프트웨어 공학에서 사용되는 아키텍쳐 패턴으로 주로 Business logic과 Presentation logic을 분리하기 위해 사용한다.

 

  • Business logic : 특정한 값을 얻기 위해 데이터 처리를 수행하는 응용프로그램의 일부, 각종 처리
  • Presentation logic : 화면상의 디자인 구성을 위한 처리

동작

1. 클라이언트의 요청

2. Controller 에서 요청에 대한 Model 호출

3. Model이 결과를 Controller에 보내줌

4. Controller가 Model 결과에 대한 화면 생성을 View에 전해줌

5. View가 결과화면을 Controller에 보냄

6. Controller가 클라이언트에 응답 보냄

 

 

MVP(Model + View + Presenter)

Model과 View는 동일하지만 Controller대신 Presenter가 생겼다.

  • Presenter : 뷰로부터 사용자 입력을 받아 모델에 전달하고, 모델로부터 받은 데이터를 뷰에 업데이트하는 역할을 수행한다. Controller와 비슷하지만 뷰와 모델을 완전히 분리하여 테스트 용이성을 높인다. 

MVC패턴의 단점이었던 View와 Model의 의존성을 해결하고 테스트

동작

1. 클라이언트의 요청

2. View를 통해 받은 데이터를 Presenter에 요청

3. Presenter 는 Model에 데이터를 요청

4. Model은 Presenter에서 요청받은 데이터를 응답

5. Presenter는 View에게 데이터 응답

6. View는 Presenter가 응답한 데이터를 이용해 화면 구성

 

 

 

MVVM (Model-View-ViewModel) 

Controller대신 ViewModel을 사용한다.

 

  • ViewModel : 뷰모델은 뷰에 표시할 데이터를 가지고 있으며, 사용자 입력을 처리하여 모델에 전달한다. 뷰모델은 뷰와 매우 밀접하게 연결되어 있으며, 사용자 인터페이스를 표현하는데 필요한 데이터와 명령들을 뷰모델에서 제공한다.

 

장점

  • 뷰와 모델 사이의 분리: 뷰와 모델이 독립적으로 테스트 가능하고, 변경이 발생해도 서로에게 영향을 미치지 않는다.
  • 유연성과 재사용성: 뷰와 뷰모델을 분리함으로써, 뷰와 뷰모델을 서로 다른 컨텍스트에서 재사용할 수 있다.
  • 디자인과 개발의 분리: 디자이너와 개발자가 동시에 작업하기 용이하도록 뷰와 뷰모델을 분리하여 개발할 수 있다.

 

동작

1. 클라이언트의 요청

2. View에서 Commend패턴으로 View Model에 요청 전달

3. View Model이 Model에 데이터 요청

4. Model은 View Model에게 요청받은 데이터 응답

5. View Model은 응답받은 데이터를 가공하여 저장

6. View는 View Model과 Data Binding하여 화면을 나타냄

 

* Data Binding : 뷰(View)와 뷰모델(ViewModel) 사이의 데이터 흐름을 자동화하는 기술이다. 이를 통해 뷰의 UI 요소들은 뷰모델의 데이터와 실시간으로 동기화되며, 뷰모델의 데이터 변경 시 자동으로 뷰에 반영된다.

 

 

 

참고출처

 

https://magi82.github.io/android-mvc-mvp-mvvm/

https://m.blog.naver.com/jysaa5/222068919728

 

'Study > 기술 및 용어 정리' 카테고리의 다른 글

REST와 RESTful API  (0) 2023.08.11
[Git] Stash, Stash pop 사용하기  (0) 2023.06.21
[Git] Git Bash 브랜치 사용법 + pr(Pull Request)하기  (0) 2023.06.20
[Git] Git Bash 사용법  (0) 2023.06.20
[AWS] RDS란?  (0) 2023.06.18