MVP와 MVC 패턴 비교

2024-07-27

개요

주요 차이점

구분MVCMVP
컨트롤러/프레젠터 역할사용자 입력 처리, 모델 업데이트, 뷰 업데이트사용자 입력 처리, 모델 업데이트, 뷰에 데이터 전달
뷰와 모델의 의존성뷰는 모델을 직접 참조뷰는 모델을 직접 참조하지 않고 프레젠터를 통해 상호 작용
테스트 용이성뷰와 모델에 대한 테스트가 어려움뷰와 모델에 대한 테스트가 비교적 용이
UI 변경뷰 변경에 컨트롤러 변경 필요뷰 변경에 프레젠터만 변경 필요
적용 범위웹 개발, 데스크탑 개발 등 다양한 분야웹 개발, 모바일 개발 등 UI 중심 개발에 적합

장단점 비교

패턴장점단점
MVC* 구현이 비교적 간단 * 다양한 프레임워크 지원 * 유연한 디자인* 뷰와 모델의 의존성이 높음 * 테스트가 어려울 수 있음
MVP* 뷰와 모델의 분리 * 테스트 용이성 * 유지 관리 용이성 * 코드 재사용 가능성 향상* 컨트롤러/프레젠터 구현 필요 * MVC보다 복잡

결론

MVC와 MVP 패턴은 각자 장단점을 가지고 있으며, 프로젝트의 특성에 따라 적합한 패턴을 선택해야 합니다.

  • MVC는 다양한 프레임워크 지원, 유연한 디자인 등의 장점이 있지만, 뷰와 모델의 의존성이 높고 테스트가 어려울 수 있다는 단점이 있습니다.
  • MVP는 뷰와 모델의 분리, 테스트 용이성, 유지 관리 용이성 등의 장점이 있지만, 컨트롤러/프레젠터 구현 필요, MVC보다 복잡하다는 단점이 있습니다.

추가 정보




MVC 예시 코드 (Python)

class Model:
    def __init__(self, data):
        self.data = data

class View:
    def __init__(self, model):
        self.model = model

    def update(self):
        # 모델에서 데이터 가져와 뷰 업데이트
        data = self.model.data
        # ...

class Controller:
    def __init__(self, model, view):
        self.model = model
        self.view = view

    def handle_user_input(self, input):
        # 사용자 입력 처리
        # ...

        # 모델 업데이트
        self.model.data = input

        # 뷰 업데이트
        self.view.update()


# 코드 실행
model = Model("초기 데이터")
view = View(model)
controller = Controller(model, view)

# 사용자 입력 처리 및 뷰 업데이트 시나리오
# ...

MVP 예시 코드 (Python)

class Model:
    def __init__(self, data):
        self.data = data

class View:
    def __init__(self, presenter):
        self.presenter = presenter

    def update(self, data):
        # 프레젠터로부터 받은 데이터로 뷰 업데이트
        # ...

class Presenter:
    def __init__(self, model, view):
        self.model = model
        self.view = view

    def handle_user_input(self, input):
        # 사용자 입력 처리
        # ...

        # 모델 업데이트
        self.model.data = input

        # 뷰 업데이트
        self.view.update(self.model.data)


# 코드 실행
model = Model("초기 데이터")
view = View(None)
presenter = Presenter(model, view)

# 뷰와 프레젠터 연결
view.presenter = presenter

# 사용자 입력 처리 및 뷰 업데이트 시나리오
# ...

비교

  • MVC 예시 코드에서 뷰는 모델을 직접 참조하여 데이터를 가져옵니다.
  • MVP 예시 코드에서 뷰는 프레젠터를 통해 모델과 상호 작용하며, 프레젠터가 모델 업데이트와 뷰 업데이트를 담당합니다.



MVC와 MVP 대체 방법

MVVM (Model-View-ViewModel)

  • MVVM은 MVP와 유사하지만 뷰 모델이라는 추가 레이어를 사용합니다.
  • 뷰 모델은 뷰와 모델 간의 데이터 바인딩을 처리합니다.
  • MVVM은 데이터 바인딩 프레임워크와 함께 사용하는 경우 특히 유용합니다.

MVU (Model-View-Update)

  • MVU는 함수형 프로그래밍 패턴으로, 모델, 뷰, 업데이트 함수로 구성됩니다.
  • 업데이트 함수는 모델과 뷰를 동기화합니다.
  • MVU는 상태 관리가 간단하고 테스트가 용이합니다.

프레젠터 패턴

  • 프레젠터 패턴은 MVC 패턴의 컨트롤러를 확장한 패턴입니다.
  • 프레젠터는 비즈니스 로직을 처리하고 뷰와 상호 작용합니다.
  • 프레젠터 패턴은 MVC 패턴보다 더 명확하고 유지 관리하기 쉬운 코드를 만들 수 있습니다.

선택 가이드

  • 프로젝트의 특성과 요구 사항에 따라 적합한 패턴을 선택해야 합니다.
  • MVC는 가장 일반적인 패턴이지만, 뷰와 모델의 의존성이 높다는 단점이 있습니다.

추가 정보


user-interface model-view-controller design-patterns

user interface model view controller design patterns