카테고리 없음
[스파르타 ][TIL] 유니티 스파르타 7기 41일차 - MVP패턴
맏난거
2025. 4. 7. 23:31
MVP 패턴은 Model-View-Presenter의 약자로, UI와 비즈니스 로직을 분리하여 코드의 재사용성과 유지보수성을 높이기 위한 아키텍처 패턴입니다. 특히 유니티, 안드로이드, 윈폼 등에서 자주 사용됩니다.
🔷 MVP 구성요소
구성요소역할
Model | 데이터와 비즈니스 로직을 담당함 |
View | UI 요소를 담당하며, 사용자 입력을 Presenter로 전달함 |
Presenter | View와 Model 사이를 중재하며, 로직을 처리하고 View를 업데이트함 |
🔷 각 역할 설명
✅ Model
- 데이터 구조, 로직 처리
- 예: 게임 점수 계산, 서버 통신, 저장 로직 등
public class ScoreModel
{
public int Score { get; private set; }
public void AddScore(int value)
{
Score += value;
}
}
✅ View
- 사용자 인터페이스(UI)를 보여주며, 사용자 입력을 Presenter로 전달
- Presenter가 전달한 데이터를 UI에 반영
public interface IScoreView
{
void UpdateScoreText(int score);
}
public class ScoreView : MonoBehaviour, IScoreView
{
public Text scoreText;
public void UpdateScoreText(int score)
{
scoreText.text = $"Score: {score}";
}
}
✅ Presenter
- View와 Model 사이에서 로직을 중재함
- View의 이벤트를 받아 Model을 조작하고, 변경된 결과를 View에 반영
public class ScorePresenter
{
private ScoreModel model;
private IScoreView view;
public ScorePresenter(ScoreModel model, IScoreView view)
{
this.model = model;
this.view = view;
}
public void AddScore(int value)
{
model.AddScore(value);
view.UpdateScoreText(model.Score);
}
}
🔷 MVP 패턴의 흐름
- 사용자가 UI(View)에서 버튼 클릭
- View가 Presenter에 이벤트 전달
- Presenter는 Model을 조작
- Model이 데이터 변경
- Presenter가 View를 업데이트
🔷 장점
✅ 역할 분리가 명확해져서 유지보수가 쉬움
✅ UI를 테스트하기 쉬움 (로직은 Presenter에 있기 때문)
✅ View와 Model이 완전히 분리되어 재사용 가능
🔷 유니티에서 MVP 적용 예시
public class GameController : MonoBehaviour
{
private ScorePresenter presenter;
void Start()
{
var model = new ScoreModel();
var view = GetComponent<ScoreView>();
presenter = new ScorePresenter(model, view);
}
public void OnScoreButtonClicked()
{
presenter.AddScore(10);
}
}