기타/디자인패턴
[디자인 패턴]MVP
Krapboss
2024. 5. 21. 21:48
[출처] https://unity.com/kr/resources/level-up-your-code-with-game-programming-patterns
M(Model) : 데이터 값을 보유하는 컨테이너 역할. 로직, 계산을 수행하지 않음
V(View) : 인터페이스에 해당하며, 데이터를 화면에 표시하는 역할
C(Controller) : 런타임 시 게임 데이터 처리와 값의 변경을 계산하는 역할
각 파트에서 기능을 제한하면서 일을 처리, 단일 책임의 원칙의 개념
MVC의 변형인 MVP모델 데이터 변경 사항 수신을 위해 View 관련 코드가 필요했다. Controller 부분을 Presenter로 변경
Presenter : 두 레이어의 중개자 | 모델에서 데이터 검색 후 View에 표시하기 위해 형식을 지정. View를 통해 들어온 입력을 토대로 모델을 조작한다. 변경된 모델의 상태를 View에 전달.
View : 그래픽, 입력 | 입력을 처리하도록 변경, Presenter에게 입력값 전달과 변경된 사항을 받아들여 View 업데이트
Model : 데이터 | Presenter로 부터 들어온 메세지를 통해 상태변경. 상태 변경이 완료될 시 Presenter에게 알림.
ClickDamage | 버튼. 사용자의 입력이 있을 경우 입력을 입력을 전달한다. |
HealthPresenter | 중개자. 사용자의 입력에 따라 리셋, 데미지 등의 명령을 Health 모델로 전달 Health Model에서 변경된 내용을 전달받아 View에 전달 |
View | UI. 입력과 변경내용을 받아 사용자에게 노출 |
모델 변경사항을 바로 View에 표시하는 것이 아닌 중개자를 통해 저장된 Action을 통해 저장된 View 변경을 실행
View에서 모델로 가기 위한 중개자가 존재.
장점
-대규모 프로젝트 시 View Presenter의 분리로 유지보수의 용이
-사용자 인터페이스와 게임플레이 로직의 분리로 인한 단순화
-클래스의 분리와 세분화로 가독성 향상과 유지보수의 용이성
주의 사항
-앞선 디자인 패턴보다 큰 아키텍쳐 패턴이기에 클래스에 대한 책임과 계획이 필요
-해당 패턴이 모든 경우에서 유용한 것이 아니다. 데이터, 로직, 인터페이스의 분리로 얻을 수 있는 이점에 대해 고려