제이슨의 개발이야기

[디자인패턴]MVC , MVP,MVVM 이란 무엇인가? 본문

디자인 패턴

[디자인패턴]MVC , MVP,MVVM 이란 무엇인가?

제이쓰은 2021. 4. 13. 23:58
728x90
반응형

안녕하세요 오늘은 모바일 개발자에게 있어서 가장 중요한 패턴이라고 생각하는 MVC , MVP , MVVM에 대해서 공부 하고자 합니다 

 

먼저 각 철자에 대해서 공부해봅시다!

 

Model : 데이터 상태 , 비즈니스 로직 부분을 Model 이라고 한다 

데이터를 보관하고 필요에 따라 가공하기도 하는 역할을 한다 

 

View : View는 사용자에게 보여지는 부분이라고 생각하면 쉽고 버튼을 누르거나 글자를 입력하거나 할때 이밴트가 발생하는 부분이다

 

Controller : Controller는 사용자의 입력 ,또는 화면 이동등등  어떠한 Action이 발생했을때 그것을 처리하거나 적합한 화면 이동을 시키는 

말그대로 컨트롤 하는 역할을 한다 

 

Presenter : Presenter는 Controller 의 가 유사하지만 Controller 와 다르게 인터페이스로 구현한다

Presenter는 Model 과 View의 가교 역할을 하는정도이고 Model 과 View 부분이 직접 연결되지 않기 위함이다 

 

ViewModel : 다른 Controller 와 Presenter 와 유사하게 View 와 Model 사이에 존재하는 것이구 

Model에서 제공받은 데이터를 UI에서 필요한 정보로 가공한뒤 View가 가져갈 수 있도록 데이터 변경에 대한 이벤트를 보내주는 역할을한다 또 view에서의 데이터 변화를 감지 할 수 있고 상태 변경(Text내용,등등) 도 가능하고 Model 데이터의 변경도 가능하다 

사용자의 입력은 View를 통해서 입력하게되고 입력된 View안에 값을 바탕으로 ViewModel의 값이 변경된다

 

 

MVC

 

MVC는 Model 과 View ,Controller 가 이루어진 구조를 의미한다 

MVC는 먼저 사용자에 의해 어떠한 이벤트(글작성,좋아요버튼클릭 등) 가 발생하면 먼저 Controller에 들어가고 

Controller는 해당 이벤트를 확인하고 Model이 수정한다 그러고 나서 Controller는 Model을 나타내줄 View를 선택하고

View는 Model을 이용하여 화면을 나타냅니다!

참고로 Model에서의 동작일 하지 않아도 되는경우 (단순 view 이동 ) 같은 경우 그냥 controller 에서 이동한다!

 

장점 -> 모델이 어디에도 종속되지 않으며, 뷰는 유닛 테스트 레벨에서 그다지 테스트할 것이 거의 없어서 쉽게 모델을 테스트할 수 있다

단점 

  • 테스트 용이성 - 컨트롤러가 안드로이드 API에 깊게 종속되므로 유닛 테스트가 어렵다
  • 모듈화 및 유연성 - 컨트롤러가 뷰에 단단히 결합되며, 뷰의 확장일 수도 있다. 뷰를 변경하면 컨트롤러로 돌아가서 변경해야 한다
  • 유지 보수 - 시간이 지남에 따라 보다 많은 코드가 컨트롤러로 모이면서 비대해지고 문제가 발생하기 쉬워진다. 특히 anemic models 모델을 사용하는 앱에서라면 더욱

MVP

 

 

MVP는 컨트롤러의 책임에 묶이지 않고도 뷰와 액티비티가 자연스럽게 결합한다 앞서 이야기 했지만 Presenter 는 인터페이스로 구현한다

View 와 Presenter 와의 관계는 강한 연결관계이고 one to one 이다 Presenter 의 역할은 Controller와 비슷하게 Model의 데이터를 수정하고, 데이터를 가져온다 그러나 mvc와의 차이는 view 에 영향을 주는 것은 오직 presenter 뿐이다 라는 것이다!

 

Presenter의 단점

  • 유지 보수 - 컨트롤러처럼 프리젠터에도 시간이 지남에 따라 추가 비즈니스 로직이 모이는 경향이 있습니다. 시간이 흐른 후 개발자는 거대하고 다루기 어려운데다 문제가 발생하기 쉽고 분리하기도 어려운 프리젠터를 발견하게 돼죠.

 

MVVM

 

View에서 입력이 발생하면 먼저 ViewModel에 전달(데이터 바인딩이 되면 ViewModel이 감지하여 값이 바뀜) ViewModel은 

Model에 데이터 변경 처리를 요청하고 Model은 변경 처리 후 ViewModel 에게 알리고 ViewModel은 결과를 보낸다

 

MVVM의 단점

  • 유지 관리 - 뷰가 변수와 표현식 모두에 바인딩될 수 있으므로 시간이 지남에 따라 관계없는 프리젠테이션 로직이 늘어나 XML에 코드를 추가하게 될 수 있습니다. 이를 방지하려면 뷰 바인딩 표현식에서 값을 계산하거나 파생하지 말고 항상 뷰모델에서 직접 값을 가져오는 것이 좋습니다. 이 방식으로 계산을 유닛 테스트할 수 있습니다.
728x90
반응형