본문 바로가기

디자인패턴

MVC, MVP, MVVM 비교

MVC, MVP, MVVM 이 무엇인가?  UI로직분리가 목적인 패턴들

특징

  • 불필요한 종속 관계를 줄임
  • 잠재적으로 스파게티 코드 방지

좌측 부터 MVC, MVP, MVVM

[MVC] Model View Controller

mvc 디자인은 각 레이어의 기능을 제한 → 단일책임원칙을 준수

모델 : 애플리케이션 데이터 관리

  • 값을 보관하는 데이터 컨테이너

뷰 : 데이터를 사용자에게 표시 (UI)

컨트롤러 : 입력 및 로직 처리

  • 게임 데이터를 처리하고 런타임에 값이 어떻게 변하는지 계산
  • 입력을 처리하고 결과를 모델로 다시 전송

특징 : 서로 엮일 수 밖에 없다.

단점 : 모델 데이터의 변경사항을 수신하기 위한 뷰별 코드가 필요

 

[MVP] Model View Presenter

모델 : 데이터와 데이터를 관리하는 규칙이 포함

  • 게임의 현재 상태, 게임 속성, 데이터에 대한 Logic(체력 점수 등)
  • *view에 대한 정보가 없음

프레젠터

  • 모델과 뷰 사이에서 중재
  • 뷰에서 사용자 입력 이벤트를 처리
  • 게임의 조건이 변경되면 모델을 업데이트하고 뷰를 업데이트

  • 사용자에게 데이터 표시
  • 사용자 상호작용 (예: 버튼클릭)을 프레젠터로 전송
  • 모델은 뷰와 직접 상호작용하지 않음
  • UI 로직이 있지만 게임 비즈니스 로직은 처리하지 않음

특징 : 프레젠터가 양방향으로 소통을 한다. 그리고 모델과 뷰는 서로 모르게

확장성 - 특정작업을 처리하는 부분들이 나눠져 있으면 코드 관리가 용이함

모듈성

  • 한 구성 요소의 변경사항이 전체 시스템 영향을 미치지않음
  • 독립적으로 개발, 테스트, 수정 가

재사용성 및 유지 관리성

[MVVM] : Model View ViewModel

  • 기존 mvp에서 뷰와 컨트롤러/프레젠터 의존성을 약화
  • 데이터 바인딩 : 뷰와 뷰모델 간의 데이터 바인딩을 통해 뷰모델 속성 변경이 자동으로 뷰에 반영

모델

  • 비즈니스 로직에서 사용되는 데이터를 포함하는 데이터 구조
  • 어떤 객체라도 될 수 있음 : ScriptableObject, Monobehaviour

  • 사용자에게 데이터를 표시하고 상호작용하는 UI
  • UI Toolkit에서는 USS 스타일 시트와 UXML 파일로 구성

뷰모델

  • 뷰 모델 사이의 중재자 역할
  • 데이터 바인딩 기능을 통해 ViewModel과 View 연결

Data Binding

  • UI가 아닌 개체의 속성과 UI 요소 간의 동기화 보장
  • Unity6부터 UI 툴킷은 런타임 데이터 바인딩 지원 
    • UI Toolkit , R3(UniRx 등) 으로 사용 가능
728x90

'디자인패턴' 카테고리의 다른 글

pub/sub Pattern  (0) 2025.05.23
유니티 - Strategy Pattern (스킬 편)  (0) 2025.04.27
State Pattern (FSM)  (0) 2024.05.01
Observer Parttern  (0) 2024.04.30
Strategy Pattern  (0) 2024.04.27