[Memo-Unity] 5. 싱글톤 패턴(singleton)

업데이트:

카테고리:

태그: ,




싱글톤 패턴(singleton)



싱글톤 패턴








1. 싱글톤 패턴 사용이유

이 패턴은 주로 객체 지향 프로그래밍에서 쓰인다.
싱글톤은 전역에서 접근이 가능하기에(Static) 원하는 스크립트에서 불러와서 마음대로 사용이 가능

public으로 매 스크립트마다 연결하는 것은 메모리의 사용이 스크립트의 수의 배수만큼 증가하지만,
싱글톤을 사용하면 한 메모리의 할당만으로 원하는 스크립트의 기능을 가져올 수 있기에 자주 쓰는 스크립트의 경우 메모리의 사용을 크게 줄일 수 있다.
접근의 편의메모리의 할당을 줄이기 위해 싱글톤 패턴을 사용








2. 싱글톤 패턴 사용법

GameManager에서 싱글톤을 사용 하였다.

GameManager.cs

using UnityEngine.UI;
using UnityEngine;
using UnityEngine.SceneManagement;

public class GameManager : MonoBehaviour
{
    public static GameManager I;    //싱글톤 패턴 ()
    
    void Awake()                    //싱글톤 화
    {
        I = this;
    }
}
  • 빗방울 게임에서는 스코어에 활용하기 위해 싱글톤 패턴이 사용되었다.








3. 장단점

장점

  • 메모리 낭비가 현저히 줄어든다는 것, (public)을 데려오는 경우 보다 싱글톤 패턴이 메모리를 절약
  • 싱글톤은 전역으로 접근이 가능하기에 가져올 필요 없이 어느 스크립트에서나 사용할 수 있다는 것

단점

  • 전역변수가 가지는 모든 단점을 그대로 갖게 된다.
  • 전역변수는 가장 마지막에 검색되게 때문에 조금 느릴 수 있으며, 유지보수가 조금 힘들어질 수 있다.








4. 12/22 추가

public class GameManager : MonoBehaviour
{
    private static GameManager _instance;
    public static GameManager Instance
    {
        get
        {   // 다른 곳에서 GaneManager.Instance~~ 를 실행 했을때 NULL 이면(게임메니저가 없으면) GameManager을 생성, DondestroyOnload
            // Instance = 새로 생성된 게임 오브젝트의 GameManager.cs 의 PRIVATE _instance
            if(_instance == null)
            {
                GameObject go = new GameObject("GameManager");
                go.AddComponent<GameManager>();
                _instance = go.GetComponent<GameManager>();
                DontDestroyOnLoad(go);
            }
            return _instance;
        }
        set
        {
            if (_instance == null) _instance = value;
        }
    }
    private void Awake()
    {
        if(_instance == null)
        {
            _instance = this;
            DontDestroyOnLoad(this);
        }
        else
        {
            if (_instance != this) Destroy(this);
        }
    }   
}
  • Instance - get, set
  • 다른 곳에서 GaneManager.Instance~~ 를 실행 했을때 NULL 이면(게임메니저가 없으면) GameManager을 생성, DondestroyOnload
  • Awake
  • 싱글톤화, DondestroyOnLoad, 새로 생긴 GameObject 가 있으면 삭제(Destroy).



[C#] 싱글톤 패턴 정리

TOP


📔

댓글남기기