Unity | UI 디자인 패턴

Clean·2025년 5월 12일

Unity

목록 보기
15/24

MVC (Model View Controller)

  • 스크립트를 Model, View, Controller 로 역할을 나누는 아키텍처(구조)

  • Model

    • 데이터, 변수 등을 보관
    • ex) HP, Stat, Inventory...
  • View

    • Model의 정보를 UI로 시각화
    • UI에 관한 기능만 사용
    • ex) 체력바, UI 버튼들...
  • Controller

    • 유저의 입력들 (키, 버튼 입력)
    • 입력에 따라 Model의 데이터 변경
public class PlayerModel
{
	private int hp = 100;
	public PlayerView view;

	public int Hp
	{
		get => hp;
		set
		{
			hp = Mathf.Clamp(value, 0, 100);
			view?.UpdateHp(hp);
		}
	}
}

Model의 프로퍼티에 값을 할당하면 View 스크립트의 함수를 실행해서 UI를 변경한다.


MVP (Model View Presenter)

  • 스크립트를 Model, View, Presenter 로 역할을 나누는 아키텍처(구조)

  • Model

    • 데이터, 변수 등을 보관
    • ex) HP, Stat, Inventory...
  • View

    • Model의 정보를 UI로 시각화
    • UI에 관한 기능만 사용
    • ex) 체력바, UI 버튼들...
  • Presenter

    • ModelView를 연결해주는 중계자 역할
public class PlayerModel
{
	private int hp = 100;

	public int Hp
	{
		get => hp;
		set
		{
			hp = Mathf.Clamp(value, 0, 100);
			OnHpChanged?.Invoke(hp);
		}
	}

	public event System.Action<int> OnHpChanged;
}
public class PlayerPresenter : MonoBehaviour
{
	private PlayerModel model = new PlayerModel();

	[SerializeField] PlayerView view;

	private void OnEnable()
	{
		model.OnHpChanged += view.UpdateHp;
	}

	private void OnDisable()
	{
		model.OnHpChanged -= view.UpdateHp;
	}

	private void Update()
	{
		if (Input.GetKeyDown(KeyCode.Space))
		{
			model.Hp -= 10;
		}
	}
}

View의 함수를 Model의 이벤트에 추가 및 제거를

중계자인 Presenter에서 하는 것이 MVP 패턴이다.


public int MaxHp
{
	set
	{
		maxHp = Math.Clamp(value, 0, maxHp);
		OnMaxHpChanged?.Invoke(maxHp);
		OnHpChanged?.Invoke(curHp, maxHp);
	}
	get
	{
		return maxHp;
	}
}

프로퍼티의 값을 할당할 때 값만 바꾸는게 아니라

다른 코드를 추가할 수 있는게 뭔가 마음에 든다.

0개의 댓글