이번엔 디자인 패턴 중 MVC, MVP, MVVM에 대해서 알아보려 합니다. 일단 먼저 디자인 패턴이 무엇 인지에 대해 알아보도록 하겠습니다.
디자인 패턴이란?
- 소프트웨어 개발 과정에서 발견된 설계의 노하우를 축적하여 그 방법에 이름을 붙여서 이후에 재사용하기 좋은 형태로 특정 규약을 만들어서 정리한 것입니다.
- 표준화된 방법을 사용하다 보니 개발자들간의 협업 또한 수월해지고 각 역할을 나누어놨기 때문에 유지보수하기도 수월하다는 장점이 있습니다.
Presentation Logic
- 화면상의 디자인 구성을위한 로직을 일컫는 말입니다.
Business Logic
- 원하는 값은 얻기 위해 사용자 눈에 보이지 않는 내부 로직을 일컫는 말입니다.
MVC (Model View Controller) 패턴
- MVC 디자인 패턴은 Model, View, Controller의 약자로 어플리케이션을 3개의 측면으로 분리하여 개발하는 디자인 패턴입니다.
- Model
- 어플리케이션에서 사용되는 데이터와 그 데이터를 처리하는 부분
- 데이터, 비즈니스 로직, 서비스 클라이언트 등으로 구성되어있습니다.
- View
- 사용자에게 보여지는 UI 부분
- Controller
- View를 나타내기 위한 데이터를 처리하는 부분
- 동작방식
- Controller 가 사용자의 입력을 받고 Update가 필요한지 Model에 확인합니다.
- Model 이 업데이트 필요 여부 판별
- 업데이트가 필요한 경우 Model 이 View에게 알립니다.
- View는 Model로부터 업데이트 이벤트를 받고.
- Model에게 필요한 데이터를 요청합니다.
- Model 은 필요한 데이터를 View에게 리스폰스 합니다.
- View는 필요한 데이터를 수신받아 View를 갱신합니다
- 장점
- 유닛테스트에서 View는 테스트할 부분이 없기 때문에 쉽게 Model만 테스트 가능합니다.
- 개발자라면 누구나 쉽게 파악 가능합니다.
- 단점
- Model과 View 사이에 의존성 발생해 앱이 커지고 복잡해질수록 유지보수가 힘들어집니다.
- MVC 패턴은 작은 프로젝트에 적합한 디자인 패턴이라 할 수 있습니다.
MVP (Model View Presenter) 패턴
- MVC에서 파생된 패턴으로 기존 MVC 패턴에서 Model과 View 간의 의존성 때문에 복잡해지는 단점을 보완해 Model과 View 간의 의존성이 없는 패턴입니다.
- MVP 패턴에서 Model과 View는 MVC와 같은 용도로 사용됩니다.
- Presenter
- Presenter는 view와 서로 완전히 분리되어 인터페이스를 통해 통신합니다.
- 이 방식은 MVC 보다 단위테스트가 훨씬 쉬워집니다.
- 동작 방식
- MVP 패턴에서는 MVC와 다르게 사용자의 입력을 View가 받습니다.
- View는 Presenter에게 작업을 요청합니다.
- Presenter에서 필요한 데이터를 Model에 요청합니다.
- Model 은 요청한 데이터를 응답합니다.
- Presenter은 View에게 데이터를 응답합니다.
- View는 Presenter로부터 받은 데이터를 화면에 출력합니다.
- 장점
- MVP패턴은 인터페이스를 통해 통신하기 때문에 MVC의 단점으로 지적되었던 View와 Model 사이의 의존성이 없습니다.
- 단점
- 앱이 복잡해질수록 Presenter와 View에 의존성이 강해집니다.
MVVM (Model View ViewModel)
- MVC에서 파생된, Model과 View 간의 의존성뿐만 아니라 Controller과 View간의 의존성도 고려하여 각 구성 요소가 독립적으로 작성되고 테스트될 수 있도록 설계된 아키텍처 패턴입니다
- MVC에서 파생되어 Model과 View는 차이가 없습니다.
- ViewModel
- View를 표현하기 위해 만들어진 View를 위한 Model입니다.
- View와는 Binding을 하여 연결 후 View에게서 입력을 받고 또한 View를 업데이트합니다
- 동작방식
- View가 입력을 받고 ViewModel에게 입력을 전달합니다.
- View Model 은 비지니스 로직을 수행합니다.
- View Model 은 모델에게 데이터를 요청합니다.
- Model 은 요청에 대한 데이터를 응답합니다.
- View Model 은 응답받은 데이터를 가공하고 저장합니다.
- VIew는 Data Binding을 통해 변경된 데이터를 보여줍니다.
- 장점
- View와 Model 이 독립성을 유지할 수 있습니다.
- 독립성을 유지하기 때문에 효율적인 유닛테스트가 가능합니다.
- view와 ViewModel 이 데이터 바인딩 하기 때문에 보일러 플레이트 코드가 적습니다.
- 단점
- 간단한 프로젝트에는 ViewModel 설계가 힘듭니다.
- 표준화된 틀이 존재하지 않아 사람마다 이해가 다릅니다.
- MVVM 패턴은 작은 프로젝트에 설계가 힘들어서 큰 프로젝트에 적합합니다.
댓글