💡 MVC 패턴
🥑 정의
- 데이터(Model)와 로직(Controller)을 분리해주는 디자인 패턴
- Model, View, Controller로 구성
- Model
- View
- 게임의 핵심 로직
- Model들을 조작하고 업데이트 된 Model들을 View에 통지
- View
- 게임 내 외적으로 보이는 모든 요소
- Controller에서 받은 데이터를 화면에 출력하는 역할
- Model과 View는 Controller의 존재를 몰라야 한다.
🌽 역할 분담
- Model
- 데이터가 변하는 로직은 Model에서 짜야 한다.
-> 유저의 입력을 바탕으로 Controller에서 계산해 넣기(X)
- 데이터가 바뀌면 OnChange를 실행하여 ViewEvent를 실행
- View
- Controller
- 사용자의 데이터 조작을 위한 Input 처리를 담당
- 유저와 상호작용 하는 부분
- Model과 View의 관계는 옵저버 패턴
- Model과 View 사이의 의존성이 높은 것이 단점
🥔 Unity에 적용
- 필요 사항
- Model의 변화를 View가 감지
- View에서 발생되는 Event를 Controller에 전달
- 각각 Controller들끼리 쉬운 통신
🥕 MVP와 비교
- MVP
- Model, View, Presenter로 구성
- 동작
- 사용자의 Action이 View를 통해 들어옴
- View는 Presenter에게 데이터 요청
- Presenter는 Model에게 데이터 요청
- Model은 Presenter에게 요청 받은 데이터 전달
- Presenter는 View에게 요청 받은 데이터 전달
- View는 전달 받은 데이터를 화면에 출력
- MVC 패턴과 달리 Model과 View의 의존성이 없다.
-> 대신 View와 Presenter가 높은 의존성을 갖게 됨
🥦 Zenject
- 의존성 주입(Dependency Injection) 프레임워크
- 프로그램의 초기화 부분에서 미리 어떤 클래스 혹은 인터페이스가 어떤 인스턴스를 받을지 정해놓고, 실행 중에 서로 다른 구성요소 간 종속성과 통신을 쉽고 느슨하게 관리
- 대부분 게임을 만들 때 구성요소 별로 Singleton을 사용해 관리
-> 어느 시점에 어떻게 초기화 되는지 보장하기 어려움
-> Zenject를 사용하면 초기화 시점이 보장되고, 인터페이스 할당도 가능하여 로직 수정이 쉬워짐
출처 - [Unity] 유니티 MVC 패턴 적용하기
출처 - Unity에서의 MVC 패턴
출처 - [디자인패턴] MVC, MVP, MVVM 비교
왜 글마다 MVC에 대한 정의가 다 다른지 모르겠다..!!!!
그래서 너네 서로 아냐고 모르냐고 ;ㅁ;
오늘은 여기까지..끗..