소프트웨어 디자인 패턴

디자인 패턴. MVC, MVP, MVVM

developer-tj 2023. 3. 8. 12:00
반응형

MVC (Model-View-Controller), MVP (Model-View-Presenter), MVVM (Model-View-ViewModel) 패턴은 소프트웨어 디자인 패턴 중에서 가장 일반적으로 사용되는 패턴 중에 하나입니다.

이 패턴들은 소프트웨어를 구성하는 다양한 요소를 분리하고, 각 요소의 역할을 명확하게 정의하여 소프트웨어를 보다 쉽게 개발, 유지, 보수할 수 있도록 도와줍니다.

  1. MVC (Model-View-Controller)
    MVC 패턴은 소프트웨어를 Model, View, Controller로 분리하는 패턴입니다.
    각각의 요소는 다음과 같은 역할을 수행합니다.
    • Model : 데이터를 처리하고 저장하는 역할을 합니다.
    • View : 사용자 인터페이스를 담당합니다.
    • Controller : 사용자 인터페이스와 데이터 처리 로직 간의 상호작용을 담당합니다.

MVC 패턴은 데이터와 사용자 인터페이스를 분리함으로써, 소프트웨어를 보다 유연하고 확장 가능하게 만듭니다.

  1. MVP (Model-View-Presenter)
    MVP 패턴은 소프트웨어를 Model, View, Presenter로 분리하는 패턴입니다.
    각각의 요소는 다음과 같은 역할을 수행합니다.
    • Model : 데이터를 처리하고 저장하는 역할을 합니다.
    • View : 사용자 인터페이스를 담당합니다.
    • Presenter : 사용자 인터페이스와 데이터 처리 로직 간의 상호작용을 담당합니다.

MVP 패턴은 MVC 패턴과 비슷하지만, Controller 대신 Presenter를 사용합니다.
이는 Controller와 달리, Presenter가 View와 직접 상호작용하고, View에 대한 로직을 모두 Presenter에서 처리하기 때문에, View를 테스트하기 쉬워진다는 장점이 있습니다.

  1. MVVM (Model-View-ViewModel)
    MVVM 패턴은 소프트웨어를 Model, View, ViewModel로 분리하는 패턴입니다.
    각각의 요소는 다음과 같은 역할을 수행합니다.
    • Model : 데이터를 처리하고 저장하는 역할을 합니다.
    • View : 사용자 인터페이스를 담당합니다.
    • ViewModel : 사용자 인터페이스와 데이터 처리 로직 간의 상호작용을 담당합니다.

MVVM 패턴은 View와 ViewModel 사이에 Data Binding을 통해 두 요소를 연결합니다.
이를 통해, ViewModel은 View의 상태를 쉽게 업데이트할 수 있고, View는 ViewModel의 상태를 쉽게 읽을 수 있습니다.
이러한 특성은 MVVM 패턴이 데이터 중심 애플리케이션을 만드는 데에 적합하다는 것을 알수 있습니다.
또한, ViewModel을 사용하여 View와 Model 간의 결합도를 낮출 수 있습니다.
이를 통해 애플리케이션의 유지보수성과 확장성을 높일 수 있습니다.
또한, MVVM 패턴은 테스트 용이성도 높습니다.
ViewModel과 Model을 분리하여 ViewModel을 테스트하면, View와 Model의 영향을 받지 않고 ViewModel의 동작을 검증할 수 있기 때문입니다.



이러한 패턴들은 아래와 같은 차이점을 가지고 있습니다.

  1. 데이터 바인딩: MVVM에서만 지원됩니다.
    MVVM에서는 뷰와 뷰모델이 바인딩되어 데이터가 변경되면 자동으로 뷰도 변경됩니다.
    반면, MVC와 MVP는 데이터 업데이트를 수동으로 처리해야 합니다.

  2. 테스트 용이성: MVP와 MVVM는 테스트 용이성이 높습니다.
    MVP에서는 프레젠터가 뷰와 모델을 분리시켜줍니다.
    MVVM에서는 뷰모델이 뷰와 모델을 분리시켜줍니다.
    따라서 테스트 코드 작성이 용이합니다.

  3. 코드 가독성: MVVM에서 가장 높은 가독성을 가지고 있습니다.
    MVVM에서는 뷰모델이 뷰와 모델 사이의 중재자 역할을 하기 때문에 뷰와 모델 간의 의존성이 줄어들고, 코드 가독성이 높아집니다.

  4. 개발 속도: MVC에서 가장 빠르게 개발이 가능합니다.
    MVC에서는 구조가 간단하기 때문에 빠르게 구현이 가능합니다.
    반면, MVP와 MVVM에서는 구조가 복잡하기 때문에 개발 속도가 느리게 될 수 있습니다.

  5. 코드 양: MVP와 MVVM에서는 코드 양이 많아집니다.
    MVP와 MVVM에서는 뷰와 모델 간의 중재자 역할을 하는 프레젠터나 뷰모델이 추가되기 때문입니다.

아래는 MVC, MVP, MVVM 패턴의 각각의 특징을 비교한 표입니다.

구분 MVC MVP MVVM
패턴 정의 Model, View, Controller 간의 분리 Model, View, Presenter 간의 분리 Model, View, ViewModel 간의 분리
역할 Model : 애플리케이션 데이터 및 비즈니스 로직
View : 사용자 인터페이스
Controller : 사용자 입력에 대한 처리
Model : 애플리케이션 데이터 및 비즈니스 로직
View : 사용자 인터페이스
Presenter : View와 Model 간의 중재자로서 View에 데이터 전달 및 Model로부터 데이터 가져오기
Model : 애플리케이션 데이터 및 비즈니스 로직
View : 사용자 인터페이스
ViewModel : View와 Model 간의 중재자로서 View에 데이터 전달 및 Model로부터 데이터 가져오기
데이터 흐름 View가 Controller에게 사용자 입력 알림 → Controller가 Model 데이터 업데이트 → Model이 View에게 데이터 업데이트 알림 View가 Presenter에게 사용자 입력 알림 → Presenter가 Model 데이터 업데이트 → Model이 Presenter에게 데이터 업데이트 알림 → Presenter가 View에게 데이터 업데이트 알림 View가 ViewModel에게 사용자 입력 알림 → ViewModel이 Model 데이터 업데이트 → Model이 ViewModel에게 데이터 업데이트 알림 → ViewModel이 View에게 데이터 업데이트 알림
의존성 관리 View가 Controller를 알고, Controller가 Model을 알고 있다. View가 Presenter를 알고, Presenter가 View와 Model을 알고 있다. View가 ViewModel을 알고, ViewModel이 Model을 알고 있다.
View와 Model 연결 Controller가 View와 Model을 직접 연결 Presenter가 View와 Model을 직접 연결 View와 ViewModel 사이에 Data Binding을 통해 연결
사용성 가장 기본적인 패턴으로, 간단한 애플리케이션에 적합 Presenter를 통해 View와 Model을 분리하여 테스트와 유지보수 용이 ViewModel을 통해 View와 Model을 분리하여 테스트와 유지보수 용이, Data Binding을 통한 코드량 감소
대표적인 언어 Java, Ruby, Python 등 Java, C# 등 C#, JavaScript, Swift 등

각 패턴의 특징과 사용 용도를 잘 파악하여 적절한 패턴을 선택하는 것이 중요합니다.