공부한 내용의 간단한 정리입니다. 정정이 필요한 내용은 댓글로 알려주세요.
MVC, MVP, MVVM은 UI와 비즈니스 로직의 분리를 위한 패턴입니다.
UI와 비즈니스 로직을 분리해 둔다면 UI를 재사용할 수 있고 독립적으로 개발 및 유지 보수할 수 있습니다.
HP에 대한 UI와 비즈니스 로직이 독립됐기에 UI를 변경해도 비즈니스 로직에 영향을 안 미치는 모습
예시를 들자면 HP를 개발한다 할 때 HP를 관리하는 개발과 HP를 UI에 나타내는 개발은 동시에 이루어질 수 있습니다. UI에서는 현재 HP에 대한 정보를 알아내기만 하면 되고 HP를 관리하는 쪽에서는 UI에서 어떻게 표시되든 신경을 안 써도 되기 때문입니다.
또한 추후 HP의 형태가 직선(바)에서 하트 모양으로 변경되어야 한다 하더라도 관리하는 코드를 건들릴 필요는 없습니다. UI에서는 HP를 받아오기만 하면 되기 때문입니다.
앞으로 보게 될 순서는 MVC, MVP, MVVM입니다. 순서가 정해진 이유는 파생된 순서입니다. MVC에서 파생된 MVP, MVP에서 파생된 MVVM이어서보통 MVC, MVP, MVVM순으로 봅니다.
이름의 MV가 겹치는 것을 볼 수 있습니다.
MV는 Model(모델), View(뷰)입니다.
MV와 연결 요소(C, P, VM)에 따라 상세한 부분이 달라지기는 합니다만 결과적으로 모델, 뷰, 연결 요소를 나누는 것을 목적으로 하는 것은 동일합니다.
모델이란 데이터를 관리하는 요소라고 보면 됩니다.
사용자에게 데이터를 표시해 주는 UI 요소에 해당합니다. 유니티로 따지자면 Button, Image 같은 요소입니다.
MVC는 모델, 뷰, 컨트롤러(Controller)입니다.
뷰가 모델에게서 데이터를 받아오고
컨트롤러는 사용자에 입력에 따라 모델을 업데이트합니다.
뷰는 모델을 이용해야 하는 구조 때문에 뷰는 모델에 대한 의존성을 갖게 됩니다.
의존성은 유지 보수에 좋지 않기에 MVC의 단점으로 꼽힙니다.
MVC는 모델, 뷰, 프리젠터(Presenter)입니다.
컨트롤러에서 프리젠터로 바뀌었습니다.
컨트롤러가 사라지면서 사용자 입력은 뷰가 받게 되고 데이터를 받아오는 것은 뷰가 아니라 프리젠터에서 하게 됐습니다.
프리젠터는 뷰에서의 사용자 입력을 받아 모델을 업데이트하고 모델로부터 데이터를 가져와 뷰를 업데이트합니다.
즉 프리젠터가 뷰와 모델 사이에서 중재를 해주고 있는 것입니다.
프리젠터가 중재를 해준 덕분에 뷰와 모델 사이의 의존성이 해결됐습니다.
MVVM은 모델, 뷰, 뷰 모델(View Model)입니다.
MVP에서 프리젠터에서 뷰 업데이트를 직접 해주던 부분을 MVVM에서는 데이터 바인딩을 활용하여 자동으로 뷰에 반영되게 해줍니다. 이 덕분에 View Model와 View는 느슨한 결합을 하게 됩니다. 이 느슨한 결합 덕분에 재사용성과 테스트 용이성이 크게 향상됩니다.
유니티에서 공식으로 지원하는 데이터 바인딩은 유니티6의 UI 툴킷을 활용해야 됩니다.