전체 글 (114)

11
11

 

📢 학습목표

  • 하위 뷰 모델을 뷰 그룹에 생성할 수 있다.
  • 생성된 하위 뷰 모델을 활용하여 다양한 작업을 수행할 수 있다.
  • 뷰 모델싱글톤 매니저의 데이터를 연동할 수 있다.
  • 이벤트 또는 액션에 구독하여 뷰 모델의 데이터를 갱신할 수 있다.

지난 시간 복습

[Binding] 키워드로 바인딩할 대상(클래스 / 함수)를 지정할 수 있습니다.

또한 단방향, 양방향, 이벤트 바인딩을 통해 변수들이 변할 때 마다 추적을 했습니다.

이어서 뷰 그룹을 다루겠습니다.

 

뷰 그룹이란

하위 요소 뷰 모델을 자신의 아래에 원하는 갯수만큼 생성하는 뷰모델입니다.

우선 저번 시간에 다뤘던 DemoViewModel.cs를 다시 보겠습니다.

UnityWeldDemo 씬에 있는 DemoViewModel 오브젝트에서 보시면 컴포넌트 인스펙터에 Plus Minus Item Collection이 있습니다.

이게 바로 상위 뷰 모델에서 소환할 수 있는 하위 뷰모델입니다.

이때 하위 뷰모델은 프리팹과 비슷한 방식으로 복제 기준이 되는 뷰모델입니다.

이제 코드를 뜯어서 이 하위 뷰모델을 어떻게 생성하는지 보겠습니다.

 

DemoViewModel.cs를 열어봅시다.

    [Binding]
    public class DemoViewModel : ViewModel
    {
        [SerializeField] ViewModelCollection _plusMinusItemCollection;

        private void SetCount(int count)
        {
            Count = count;
            IsMinus = Count < 0;
            _plusMinusItemCollection.PrepareViewModels(Math.Abs(Count));
            foreach (var item in _plusMinusItemCollection.GetViewModels())
            {
                var plusMinusItem = item as PlusMinusItem;
                if (plusMinusItem != null)
                {
                    plusMinusItem.IsPlus = Count > 0;
                }
            }
        }

보다시피 ViewModelCollection을 할당 가능하고 이걸 PrepareViewModels(갯수) 메서드를 호출하여 해당 갯수만큼 뷰모델을 생성할 수 있습니다.

 

 

PrepareViewModels 함수 내부

        public void PrepareViewModels(int count)
        {
            if (_pool.Count < count)
            {
                for (int i = _pool.Count; i < count; i++)
                {
                    var viewModel = Instantiate(baseViewModel, transform);
                    _pool.Add(viewModel);
                }
            }
            for (int i = 0; i < count; i++)
            {
                _pool[i].gameObject.SetActive(true);
            }
            for(int i = count; i < _pool.Count; i++)
            {
                _pool[i].gameObject.SetActive(false);
            }
            _count = count;
        }

해당 함수에서 하위 뷰모델을 Instantiate로 복제가 되는걸 볼 수 있습니다.

이렇게 복제한 뷰모델은 아래 이미지와 같이 LayoutGroup에서 위치를 조정가능합니다.

 

 

하위 뷰모델을 원하는 위치에 생성하는 법

예시를 스크롤 뷰 그룹으로 들겠습니다.

스크롤 안에 들어갈 요소들은 스크롤 뷰 아래에 생성해야겠죠?

그러기 위해서 DemoViewModel.cs와 비슷하지만 원하는 위치를 할당 할 수 있는 코드로 개선해본 GroupView.cs를 보여드리겠습니다.

 

 

GroupView.cs

using System;
using System.Collections;
using System.Collections.Generic;
using UI;
using UnityEngine;
using UnityWeld.Binding;

namespace UnityWeld
{
    [Binding]
    public class GroupView : ViewModel
    {
        private bool _isActive;

        [Binding]
        public bool IsActive
        {
            get => _isActive;
            set
            {
                _isActive = value;
                OnPropertyChanged(nameof(IsActive));
            }
        }
        private int _count = 0;
        public int Count => _count;
        [SerializeField] private ViewModel baseViewModel;

        [SerializeField] private Transform scrollParent; // 생성될 뷰모델의 부모
        private List<ViewModel> _pool = new();

        protected override void Awake()
        {
            base.Awake();
            if (scrollParent == null && baseViewModel != null) scrollParent = baseViewModel.transform.parent;
            if(baseViewModel != null) baseViewModel.gameObject.SetActive(false);
        }

        public void PrepareViewModels(int count)
        {
            if (_pool.Count < count)
            {
                for (int i = _pool.Count; i < count; i++)
                {
                    var viewModel = Instantiate(baseViewModel, scrollParent);
                    _pool.Add(viewModel);
                }
            }
            for (int i = 0; i < count; i++)
            {
                _pool[i].gameObject.SetActive(true);
            }
            for(int i = count; i < _pool.Count; i++)
            {
                _pool[i].gameObject.SetActive(false);
            }
            _count = count;
        }
        
        public ViewModel GetViewModel(int index)
        {
            if(index < 0 || index >= Count)
                throw new IndexOutOfRangeException();
            return _pool[index];
        }
        public List<ViewModel> GetViewModels()
        {
            return _pool.GetRange(0, Count);
        }
    }
}

코드를 보시면 위에 [SerializeField] private Transform scrollParent; 부분이 있습니다.

해당 필드를 통해 인스펙터에서 뷰모델의 부모를 할당가능합니다.

위에서 소개해드렸던 DemoViewModel.cs와의 차이점은 ViewModelCollection 필드가 필요없다는 점입니다. 그냥 뷰 그룹에서 원하는 만큼 원하는 위치에 생성하는 것이죠.

핵심은 우리가 원하는 입맛으로 ViewModel.cs를 상속해서 구현할 수 있다는 점입니다.

 


뷰모델에 데이터 연결하기

외부 데이터 가져오는 방법은 굉장히 다양하고 많습니다.

그러나 대부분은 싱글톤으로 데이터를 관리하시는데요.

지금부턴 싱글톤에 있는 데이터를 뷰 모델에서 참조하는 방법을 알려드리겠습니다.

지금부터 나오는 코드들은 직접 아무 폴더에 스크립트 생성해서 따라 적어주시기바랍니다.

 


싱글톤

Copy
using UnityEngine;
using System;

public class GameDataManager : MonoBehaviour
{
    private static GameDataManager _instance;
    public static GameDataManager Instance
    {
        get
        {
            if (_instance == null)
            {
                _instance = FindObjectOfType<GameDataManager>();
                if (_instance == null)
                {
                    GameObject go = new GameObject("GameDataManager");
                    _instance = go.AddComponent<GameDataManager>();
                }
            }
            return _instance;
        }
    }

    private int _gold = 0;
    public event Action<int> OnGoldChanged;

    public int Gold
    {
        get => _gold;
        set
        {
            _gold = value;
            OnGoldChanged?.Invoke(_gold);
        }
    }
    public void AddGold(int gold)
    {
        Gold += gold;
    }

    private void Awake()
    {
        if (_instance != null && _instance != this)
        {
            Destroy(gameObject);
            return;
        }
        _instance = this;
        DontDestroyOnLoad(gameObject);
    }
} 

골드가 바뀔 때마다 OnGoldChanged 액션을 호출하여 구독하고 있는 뷰모델들이 해당 데이터를 알 수 있게됩니다.

 

 

왜 이벤트를 안쓰고 액션을 쓸까요?

→ 사실 이건 취향의 영역입니다. 해당 상황에선 매개변수 int값인 골드만 잘 전달하면 되고 sender, 즉 보내는 제공자를 알필요가 없기 때문입니다. 어차피 싱글톤 클래스잖아요.

Copy
using UnityWeld.Binding;

namespace UnityWeld
{

    [Binding]
    public class ShopItemViewModel : ViewModel
    {
        private int _price;
        private bool _canBuy;

        [Binding]
        public int Price
        {
            get => _price;
            set
            {
                _price = value;
                OnPropertyChanged(nameof(Price));
                UpdateCanBuy();
            }
        }

        [Binding]
        public bool CanBuy
        {
            get => _canBuy;
            private set
            {
                _canBuy = value;
                OnPropertyChanged(nameof(CanBuy));
            }
        }

        private void Start() {
            Initialize(1000); //1000원 가격으로 초기화
        }

        public void Initialize(int price)
        {
            Price = price;
            GameDataManager.Instance.OnGoldChanged += _ => UpdateCanBuy();
        }

        private void UpdateCanBuy()
        {
            CanBuy = GameDataManager.Instance.Gold >= Price;
        }

        [Binding]
        public void OnPurchase()
        {
            if (!CanBuy) return;

            GameDataManager.Instance.Gold -= Price;
            // 구매 처리 로직 추가
        }
    }
}

위의 뷰모델은 상점 페이지의 하위 요소들 뷰모델입니다.

이 요소들은 싱글톤 데이터 매니저의 골드 필드가 바뀔 때마다 액션이 호출되면 UpdateCanBuy() 함수를 실행합니다.

그렇기 때문에 구매가능한 골드가 모이면 자동으로 구매 가능한 표시를 하게됩니다.

이 구매 가능한 표시는 CanBuy 변수이고 이것 또한 Binding되어있기 때문에 우리가 UI에서 해당 변수를 바인딩하면 구매버튼을 활성화/비활성화할 수 있습니다.

 

 

해당 상점 뷰 모델을 바인딩한 뷰모델 구현

우선 DemoViewModel 객체에 Shop Item View Model 컴포넌트를 붙여줍니다.

물론 실제 여러분이 만드실 땐 다른 객체에 다른 뷰 모델을 만드셔야하지만 지금은 이렇게 해놓겠습니다.

위에 만든 상점 뷰모델을 바인딩할 버튼으로 Button_Add에 OneWayPropertyBinding 컴포넌트를 줍시다.

이렇게 세팅해주시면 됩니다.

버튼의 interactable를 CanBuy 프로퍼티에 바인딩한 모습입니다.

false라면 버튼을 못 누르겠죠?

추가로 느낌이 좀 있게 버튼 못 누를 땐 버튼을 사라지게 해봅시다.

 

이렇게 버튼을 세팅해놓으시면됩니다.

이렇게만 하면 버튼이 사라지긴하지만 버튼의 내용물인 더하기 이미지는 안사라집니다.

그럼 그 이미지도 one way property로 바인딩참조하여 끄면 되는겁니다.

아주 간단한 문제입니다.

이제 Game Data Manager를 씬에 하나 만들어줍시다.

그리고 버튼도 하나 만들어서 위에 만든 싱글톤 오브젝트 참조해서 누를 때마다 Gold를 500추가합시다

싱글톤 GameDataManager에 AddGold 함수를 버튼에 참조해줍니다

일단 테스트를 위해 그냥 버튼에 했는데 이벤트 바인딩으로 어떻게 구현해야할지도 한번 고민해보시기 바랍니다.

이제 테스트 해보시면 Add 500 버튼을 두번 눌러줘야 싱글톤 데이터 매니저의 골드가 1000이되어 참조중인 뷰모델의 price 기준인 1000을 넘게 되어 더하기 버튼이 생기고 없어지는걸 볼 수 있습니다.

오늘 배운 방식으로 뷰 모델을 원하는 곳에 사용하시기바랍니다. 수고하셨습니다.

 


💡핵심 정리

 

핵심 정리:

  1. 뷰 그룹에 하위 뷰 모델을 생성하여 UI 구조를 효율적으로 관리할 수 있습니다.
  2. 싱글톤 패턴을 활용하여 게임 데이터를 중앙에서 관리하고, 뷰 모델에서 이를 참조할 수 있습니다.
  3. 데이터 바인딩을 통해 UI 요소의 상태를 동적으로 업데이트하여 사용자 경험을 향상시킬 수 있습니다.

📚 같이 보면 좋은 글

COMMENT
 
11
10

 

📢학습 목표
  • [Binding] 키워드
  • OneWayProperty Binding 컴포넌트 다룰 수 있다
  • TwoWayProperty Binding 컴포넌트 다룰 수 있다
  • EventBinding 컴포넌트 다룰 수 있다

시작 전 저번 시간에 배울걸 정리해봅시다.

데이터 바인딩: UI 요소와 데이터 소스를 연결하여 데이터가 변경될 때 UI가 자동으로 업데이트되도록 하는 과정입니다.

View : 뷰는 UI 요소입니다. 버튼이나 글자 띄우는 UI같은걸 말합니다.

View Model : 뷰 모델은 뷰와 모델간 중개자 역할을 합니다. 뷰의 상태와 행동을 관리하고, 뷰와 모델 사이의 데이터 바인딩을 처리합니다.

오늘 배워볼 UnityWeld는 ViewModel을 View에 등록하여 실시간으로 UI에 ViewModel 값이 추적됩니다.

그럼 시작해보겠습니다.

[Binding] 키워드

우선 뷰모델이 될 컴포넌트(클래스)안에는 무조건 [Binding] 키워드가 있어야합니다.

 
[Binding]
public class DemoViewModel : ViewModel
{
}

이런식으로 클래스 위나 앞에 [Binding] 키워드 넣어주셔야합니다.


private int _count;
[Binding]
public int Count
{
    get => _count;
    set
    {
        _count = value;
        OnPropertyChanged(nameof(Count));
    }
}

바인딩될 변수 또한 위나 앞에 [Binding] 키워드 넣어주셔야합니다.

이 떄 변수는 무조건 public이여야 바인딩되겠죠?


[Binding]
public void OnClickAdd()
{
    SetCount(Count+1);
}

함수 또한 앞이나 위에 [Binding] 키워드 넣어주셔야합니다.

이렇게 바인딩 키워드를 넣으셨으면 유니티 에디터에서

이런식으로 [Binding] 키워드를 넣은 변수나 메서드들이 추적 가능합니다.

만약에 안뜬다면 클래스나 해당 변수나 메서드에 [Binding] 키워드가 빠져있는지 보시면 됩니다.

 

💡핵심 정리

[Binding] 키워드를 통해 바인딩 될 뷰 모델의 변수들을 지정해봤습니다.

또한 단방향, 양방향, 이벤트 바인딩을 통해 변수들이 변할 때 마다 추적을 했습니다.

 

다음에는 좀 더 디테일한 예제로 실전에서 쓸 수 있도록 뷰 그룹에 대해서 다루겠습니다.

 

📚같이 보면 좋은 글
COMMENT
 
11
09

 

 

 

📢학습 목표

 
  • 에셋 설치를 위한 OpenUPM 설치법
  • UnityWeld 에셋 설치

OpenUPM 설치법

저번 시간에 이어 이번엔 MVVM을 유니티에서 사용하기 위한 UnityWeld 에셋을 설치해봅시다.

OpenUPM은 오픈소스(예: 에셋)들을 UPM(Unity Package Manager)에서 사용할 수 있게 도와주는 플랫폼입니다.

풀 네임은 Open Unity Package Manager입니다.

즉 유니티 패키지 매니저로 저러한 오픈소스 에셋들을 설치하려면 관리하기 복잡합니다.

Packages/manifest.json 파일에 하나하나 버전 관리를 해야하는데 이들을 묶어서 관리해줄 수 있는게 바로 OpenUPM입니다.

OpenUPM을 설치하기 전 GitNodejs 12이상의 버전이 필요합니다.

 

Git 있는지 체크

이런식으로 명령어 cmd창에 git —version을 입력해주시면 확인 가능합니다.

NodeJs 버전 체크

이런식으로 명령어 cmd창에 node -v을 입력해주시면 확인 가능합니다.

 

없으면 아래 링크에서 다운

https://nodejs.org/en/download/package-manager

 

Node.js — Download Node.js®

Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.

nodejs.org

 

https://git-scm.com/downloads

 

Git - Downloads

Downloads macOS Windows Linux/Unix Older releases are available and the Git source repository is on GitHub. Latest source Release 2.47.0 Release Notes (2024-10-06) Download Source Code GUI Clients Git comes with built-in GUI tools (git-gui, gitk), but ther

git-scm.com

 

Nodejs는 링크에서 해당하는 플랫폼에 맞게 명령어를 입력해서 설치해주시고

이러한 준비가 되었다는 가정하에 시작하겠습니다.

OpenUPM 설치

npm install -g openupm-cli

해당 명령어를 CMD에 입력해주시면 다운하게 됩니다.

설치후 openupm -V (v가 대문자임) 버전이 잘 나오면 성공적으로 다운하셨습니다.

UnityWeld 설치

이제 OpenUPM으로 UnityWeld를 설치해봅시다.

우선 패키지 설치해줄 프로젝트를 고르시고 해당 프로젝트 폴더로 가봅시다.

없으면 빈 프로젝트로 만드시고

저는 UnityWeldKR이라는 프로젝트를 만들어서 해당 폴더로 갔습니다.

참고로 폴더 위치 모르신다면 유니티 허브를 키셔서

해당 프로젝트에 우클릭하시고 Show in Explorer를 눌러주시면 됩니다.

이제 해당 경로를 복사한 뒤

CMD를 관리자 모드로 열어주시고

다른 드라이브라면 U: 이런식으로 드라이브 문자를 입력해주면 되고

복사한 위치로 cd 복사한위치 해주셔서 해당 경로로 가신 뒤

openupm add com.clearsky.unityweldkr

입력해주시면 됩니다.

이제 해당 프로젝트를 유니티로 여신뒤 가보시면

Edit → ProjectSettings → Package Manager에 이렇게 잘 되어있으면 설치가 완료된겁니다.

오늘은 설치 및 세팅으로 마치겠습니다.

수고하셨습니다.

 

💡핵심 정리

OpenUPM 설치하는 법을 배워봤습니다.

UnityWeld 에셋을 설치하는 것도 배워봤습니다.

https://openupm.com/packages/com.clearsky.unityweldkr/

 

Unity Weld KR | com.clearsky.unityweldkr | Unity Package (UPM) Download

This project is a original fork of UnityWeld(Real-Serious-Games) with the goal of being actively maintained. This project aims to provide a robust and efficient data binding solution for Unity developers, facilitating seamless integration and synchronizati

openupm.com

UnityWeld 에셋 OpenUPM 페이지

 

https://github.com/Real-Serious-Games/Unity-Weld

 

GitHub - Real-Serious-Games/Unity-Weld: MVVM-style data-binding system for Unity.

MVVM-style data-binding system for Unity. Contribute to Real-Serious-Games/Unity-Weld development by creating an account on GitHub.

github.com

UnityWeld 원본 에셋 페이지

 

COMMENT
 
11
07

 

https://youtu.be/fxlYxhhf83s?si=4AkXivZjY6zzQb_Y

 

MVC, MVP, MVVM 디자인 패턴과 관련된 영상입니다.

시간이 여유롭다면 시청을 추천드리며 굳이 영상 없이도 글로만 개념을 훑어보시는것도 좋습니다.

디자인 패턴이란?

다수의 개발자들이 시행착오를 거치면서 겪었던 부분들을 수정하고 개선하면서 만들어진 일종의 템플릿입니다. 굳이 말하자면 우리가 다룰것은 UI 구현하는 템플릿과도 같습니다.

왜 쓰는걸까?

여러분은 디자인패턴을 몰랐을 뉴비 때 아마도 그냥 모든 UI나 데이터가 변하는 코드를 한 스크립트에 꽉꽉 뭉쳐놨을겁니다. 그러면 나중에 문제가 생겼을 때 다시 그 문제 부분을 찾아보느라 시간을 버릴 가능성이 큽니다.

“ 각각의 역할을 나눠 코드 관리를 하자!“

이게 가장 중요한 이유입니다.

역할을 나누어 관리가 된다면, 유지보수와 개발효율이 좋아지겠죠?

이제부터 MVC, MVP, MVVM을 한번씩 훑어볼 예정인데 결국에 우리가 배우게될 MVVM에 다가가기전 다른 패턴들의 장단점을 보면서 MVVM이 꼭 정답이 아니란걸 알고 계시면 좋을 것 같습니다.

 

시작전 용어 정리

처음 접하시면 용어가 생소해서 이해가 안될겁니다. 한번 정리해드릴테니 아래에서 읽다 다시 돌아와서 보시면 될거같습니다.

질문은 언제나 환영!

Model - 데이터들을 모은 형상 그자체입니다. 그냥 데이터 구조체라고 보시면 됩니다.

View - 말 그대로 보여주는 화면 그자체입니다. UI의 각 요소들도 다 뷰가 됩니다.

ViewModel - 보여주기위한 데이터를 관리하는 친구입니다. 뷰의 데이터인것이죠.

Controller - 사용자의 입력을 받고 처리하는 친구입니다.

Presenter - 중개자, 사회자의 역할로 뷰와 모델의 중개자 역할을합니다.

MVC

Model - View - Controller로 구분되어있습니다.

위에 용어에서 적혀있듯이 컨트롤러가 사용자의 입력을 받습니다.

입력받은거에 맞게 컨트롤러가 데이터부분인 모델을 수정합니다. (데이터가 바뀜) 그리고 컨트롤러가 해당 모델에 맞는 뷰를 선택해준 뒤 모델을 호출해 뷰를 수정합니다.

컨트롤러는 여러 뷰를 선택할 수 있고 항상 꼭 컨트롤러로 모델을 호출해 뷰를 수정해야합니다.

하나의 컨트롤러가 뷰와 모델을 연결해주는게 가능한거죠.

느낌이 오셨겠지만 컨트롤러는 꼭 모델과 뷰를 연결해야하기에 프로젝트가 커지고 뷰가 많아지면(버튼 같은거) 조장역할을 맡은 컨트롤러가 엄청 커지고 복잡해지겠죠?

컨트롤러의 역할을 분배해주는 방법을 찾아봅시다!

MVP

Model - View - Presenter로 구분되어있습니다.

이전의 MVC에 비교해서 설명하겠습니다.

Model과 View는 MVC에서와 똑같고 Controller 대신 Presenter이 들어갔습니다.

Presenter이란 중개자, 사회자란 뜻으로 사용자가 뷰(버튼같은거) 눌러서 입력을 했으면 뷰가 반응을 하여 중개자에게 요청을 날립니다.

중개자는 이에 맞게 모델을 찾아 요청을 합니다.

모델은 요청을 듣고 수정할 부분을 수정한 뒤 다시 중개자한테 제출합니다.

중개자는 이를 바탕으로 뷰에게 바뀐 부분을 알려줍니다.

이에 맞게 뷰가 스스로 바뀐 데이터에 맞게 변하게 되는것입니다.

MVC와 반대로 꼭 컨트롤러를 안거쳐도 되니 뷰와 모델이 관계가 느슨해졌습니다.

다만 뷰는 중개자에게 의존적이기 때문에 한 뷰마다 한 중개자가 필요합니다.

너무 중개자에게 의존하기 때문에 좋지 않습니다.

그럼 이를 개선한 방법도 있지않을까요? 그게 바로 MVVM입니다.

MVVM

Model - View - ViewModel 로 구분되어있습니다.

지금까지 Controller 컨트롤러나 Presenter 중개자가 있었는데

이번엔 달랑 모델과 뷰만 있습니다.

그런데 자세히 보니 뷰와 모델이 합쳐진 뷰모델도 있습니다.

모델은 그냥 데이터들의 모음이고 뷰모델은 이를 연산하여 모델을 갱신합니다.

뷰가 해당 뷰모델을 참조해서 실시간으로 바뀐걸 보여줍니다.

어떻게 보면 중개자와 비슷한 역할의 뷰모델인데 차이점으론 뷰모델은 뷰가 누가 있는지 모른다는겁니다. 그럼 이제 서로 의존성이 다 느슨해졌고 간단해졌죠?

이렇게 완벽해보이는 MVVM이지만 구현방식이 다르고 생각보다 구현시 손이 많이 갑니다.

그래도 우린 유니티 개발자니 어떻게 유니티에서 MVVM을 구현하는지 다뤄보겠습니다.

데이터 바인딩이란?

MVVM에서 뷰가 어떻게 뷰모델을 참조할까요?

다른 웹앱들은 [뷰 클래스]에서 뷰모델을 소유하는식으로 되어있습니다.

근데 우린 유니티로 개발하니 에디터에서 지정해서 뷰가 뷰모델을 바인딩(Binding)하는 방식을 쓸겁니다.

데이터 바인딩이란 UI 요소와 데이터 소스를 연결하여 데이터가 변경될 때 UI가 자동으로 업데이트되도록 하는 과정입니다.

우리가 배운 MVVM에선 ViewModel의 데이터를 View에 자동으로 반영하는 기법입니다. Unity에서는 INotifyPropertyChanged 인터페이스를 사용하여 이 기능을 구현할 수 있습니다.

예를 들어, ListView(UI)와 ListViewModel(데이터 컬렉션)을 바인딩하면 List의 데이터를 변경 시 바뀐 뷰모델을 바인딩한 UI가 자동으로 갱신됩니다.

헷갈리겠지만 바인딩은 다른 뜻도 존재하므로 알아두시기 바랍니다.

  • 변수 바인딩: 프로그래밍에서 변수를 선언하고 초기화하거나, 변수를 특정 값이나 객체에 연결하는 과정. ← 우리가 알고 있는 값 할당 느낌 int a = 10; 이런식
  • 이벤트 바인딩: 특정 이벤트가 발생할 때 실행될 함수를 지정하는 과정. 예를 들어, 버튼 클릭 이벤트와 클릭 핸들러를 연결하는 것.

💡핵심 정리

지금까지 MVC, MVP, MVVM 디자인 패턴을 알아보면서 각각의 특징과 장단점을 알아보았습니다.

우리가 앞으로 쓰게될 MVVM 디자인 패턴의 배경을 잘 알게되셨을거라고 생각합니다.

또한 MVVM을 유니티에서 구현시에 쓰게될 데이터 바인딩 방식을 다뤘습니다.

다음 회차부터 본격적으로 MVVM을 유니티에 구현해볼 예정입니다!

수고하셨습니다.

 

COMMENT