본문 바로가기

FrontEnd

[ 디자인 패턴 ] MVC, MVP , MVVM

728x90
반응형

디자인 패턴이란 ?

디자인 패턴이란 프로그램이나 어떤 특정한 것을 개발하는 중에 발생했던 문제점들을 정리해서

상황에 따라 간편하게 적용해서 쓸 수 있는 것을 정리하여 특정한 규약을 통해 쉽게 쓸 수 있는 형태로 만든것을 의미.

 

  1    MVC

개발할 때 3가지 형태로 구분하여 개발하는 소프트웨어 개발 방법론 중 하나

Model

데이터와 그 데이터(내부 비지니스 로직)를 처리하는 부분 → **"무엇"**을 할지 정의

View

사용자에게 보여지는 UI부분

Controller  input

사용자로부터 입력 을 받고 Model 또는 View중개인 역할 → "어떻게" 처리할지 알려주는 역할

 

 

장점 단점
비지니스 처리 로직과 사용자 인터페이스 요소들을 분리시켜 서로 영향없이 개발 하기 수월하다는 장점

앱이 커지고 복잡해질수록 View와 Model의 의존성이 생기고, Controller를 통해 복잡하게 연결될 수 있어 유지보수가 어렵다

 

 

 

  2   MVP

MVC에서 View와 Model의 의존성이 생기는 것을 보완해

View와 Model의 의존성이 없는 패턴인 "MVP"

Model

데이터와 그 데이터(내부 비지니스 로직)를 처리하는 부분 → **"무엇"**을 할지 정의

View  input

사용자로부터의 입력을 받고 사용자에게 보여지는 UI부분을 표시

Presenter

뷰(View)와 모델(Model) 사이에서 자료 전달 역할

 

 

 

장점 단점

Presenter를 통해 Model과 View를 완벽히 분리해 주기 때문에
View는 Model을 따로 알고 있지 않아도 된다는 장점

앱이 커지고 복잡해질수록 View와 Presenter의 의존성이 생긴다.

 

 

 

  3   MVVM

하나의 소프트웨어를 최대한 기능적으로 작은 단위로 나누어
테스트가 쉽고 큰 프로젝트도 상대적으로 관리하기가 좋은 구조

Model

데이터와 그 데이터(내부 비지니스 로직)를 처리하는 부분 

View  input

사용자로부터의 입력을 받고 사용자에게 보여지는 UI부분을 표시

View는 ViewModel을 관찰하고 있다가 상태 변화가 전달되면 화면을 갱신해야 함.

ViewModel

View와 Model 사이의 매개체 역할

모든 View와 관련된 비즈니스 로직은 이 곳에 들어가게 되며

데이터를 잘 가공해서 View에서 뿌리기 쉬운 Model로 바꾸는 역할을 하거나 

작업이 끝난 후 View를 이에 맞춰 바꿔줘야 하는데 데이터 바인딩을 통해서 이를 달성한다.

 

* 데이터 바인딩의 개념은 쉽게 말해Model과 UI 요소 간의 싱크를 맞춰주는 것이라 할 수 있다

이 패턴을 통해 View와 로직이 분리되어 있어도 한 쪽이 바뀌면 다른 쪽도 업데이트가 이루어져 데이터의 일관성을 유지할 수 있다.

 

 

장점 단점

MVC 패턴의 View와 Model의 독립성을 유지하고
MVP 패턴과 같이 보여주는 로직과 비즈니스 로직을 나누었다

데이터 바인딩이 필수적으로 요구된다.
다양한 방법을 통해 바인딩이 가능하지만 그 작업을 위해 
Boilerplate code를 짜야 한다. 그래서 작은 프로젝트에서는 유용하지 않다.

Boilerplate code  작지만 대체할 수 없고, 여러 곳에 포함되어야 하는 코드 섹션.

프로그래머가 매우 작은 일을 하기 위해서 많은 코드를 작성해야 하는 경우를 말한다.

 

 

 

 

https://blog.yena.io/studynote/2019/03/16/Android-MVVM-AAC-1.html

 

+ ) MVC와 MVVM 차이점

기존 MVC(Model - View - Controller) 구조에서는 액티비티가 컨트롤러의 역할을 했으며,

뷰와 연결되어 유저와 상호작용도 하고, 모델과 연결되어 데이터도 처리했다.

즉 뷰와 모델 사이에서 중재자 역할을 했다.

 

MVVM에서는 뷰에서 뷰모델로, 뷰모델에서 모델로 작업을 처리하며,

뷰에서 모델을 직접 참조하지 않는다.

대신 뷰에서 뷰모델을 관찰하며 데이터의 변경 사항을 감지한다.

 

 


✔️ 참고

https://brunch.co.kr/@oemilk/113

https://medium.com/@jang.wangsu/디자인패턴-mvc-패턴이란-1d74fac6e256

https://brunch.co.kr/@oemilk/75

https://hackersstudy.tistory.com/71

https://velog.io/@jojo_devstory/안드로이드-아키텍처-패턴-MVVM이-뭘까

https://blog.yena.io/studynote/2019/03/16/Android-MVVM-AAC-1.html

728x90
반응형