
게임을 개발하다 보면 기획이 변경됨에 따라 UI가 변경될 가능성이 있다.
이때 로직과 UI를 분리하면 비교적 적은 수정을 통해 대응할 수 있다.
로직과 UI를 분리하는 아키텍처 패턴은 MVC, MVP, MVVM이 있으며 모두 MV를 포함한다.
MV는 각각 데이터를 저장하는 Model과 사용자에게 보여지는 View의 약어를 의미한다.
MVC는 Model, View, Controller로 각각의 역할을 구분하여 독립적인 기능을 수행한다.
Controller는 Model과 View 사이에서 중개자의 역할을 하며, 사용자는 Controller를 사용하여 Model의 데이터를 수정하게 된다.

MVC 패턴은 Model의 업데이트에 따라 View가 업데이트 되어야 하므로, Model과 View 간의 의존성이 발생한다.
하지만 게임 개발을 많이 하면 느끼겠지만, Model과 View 간의 의존성 주입은 쉽지 않다.
이에 따라 등장한 것이 MVP 패턴이다.
MVP는 MVC에서 파생된 패턴으로 Controller를 대신해 Presenter가 추가된다.
Presenter는 Controller의 역할을 함과 동시에 Model과 View의 의존성을 끊어주는 연결자 역할을 한다.

MVVM은 MVP에서 파생된 패턴으로 Presenter를 대신해 ViewModel이 추가된다.

View와 View Model 사이의 모델 데이터가 바인딩되어 Model이 갱신되면 View Model의 데이터가 갱신되고, View Model의 데이터가 갱신되면 View도 연쇄적으로 갱신된다.
MVC, MVP, MVVM 중 어느 것이 더 좋다고 말할 수 없지만, 확실한 건 데이터와 화면과 시스템은 각각 분리되어야 한다.
MVC는 Model과 View의 의존성이 강하고 Controller의 역할이 약해서 코드의 복잡성이 증가한다.
MVVM은 View Model에서의 갱신이 View에 즉시 이루어지기 때문에, 플레이어의 상호작용 없이 화면이 갱신될 수도 있다.
MVP는 Presenter의 역할이 대부분으로 Presenter만 잘 작성한다면 Model과 View 사이의 의존성도 없을 뿐더러 단순하게 작동한다.
따라서 게임에는 MVP 만한게 없지 않을까.. 생각한다.