주녘공부일지

[Unity] 싱글톤 패턴 (Singleton Pattern) 본문

GameDevelopment/[Unity] Pattern, Etc

[Unity] 싱글톤 패턴 (Singleton Pattern)

주녘 2023. 12. 6. 17:17

싱글톤 패턴 (Singleton Pattern) 이란?

특정 클래스의 객체(instance)가 오직 하나만 존재하기 원할 때 사용하는 디자인 패턴으로 최초 한번만 메모리를 할당하고 메모리에 인스턴스를 만들어 재사용하는 디자인 패턴

- 즉, 오직 한 개의 클래스 인스턴스만 갖도록 보장하며, 전역 접근점은 제공하는 디자인 패턴

1) 싱글톤 패턴의 장점

- 사용하지 않으면 인스턴스를 생성하지 않으며, 고정된 메모리 영역을 사용하므로 메모리 낭비 방지가 가능

- 다른 클래스의 인스턴스들이 데이터를 공유하기 편리한 등의 쉬운 접근성

2) 싱글톤 패턴의 단점 ( 전역 변수 )

- 코드 이해 난이도를 높일 수 있음 ( 참조가 너무 많아 버그 추적이 어려움, 등 )

- 인스턴스들 간에 결합도가 높아짐 ( 객체 지향 설계 원칙에 어긋남 )

- 전역 변수는 멀티스레딩 같은 동시성 프로그래밍에 알맞지 않음

 -> 멀티 쓰레드 환경에서 동기화처리를 안하면 문제가 발생할 수 있음 ( 코드 성능 저하 )

 

 

싱글톤 패턴을 적용한 예제 ( Class Managers )

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Managers : MonoBehaviour
{
    static Managers s_Instance; // 유일성 보장
    public static Managers Instance { get{ Init(); return s_Instance; } }

    void Start()
    {
        Init();
    }

    static void Init()
    {
        if(s_Instance == null)
        {
            GameObject go = GameObject.Find("@Managers");
            if(go == null)
            {
                go = new GameObject { name = "@Managers" };
                go.AddComponent<Managers>();
            }

            DontDestroyOnLoad(go);
            s_Instance = go.GetComponent<Managers>();
        }
    }
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Player : MonoBehaviour
{
    void Start()
    {
    	Managers mg = Managers.Instance;
    }
}

'GameDevelopment > [Unity] Pattern, Etc' 카테고리의 다른 글

[Unity] 오브젝트 풀링 (Object Pooling)  (0) 2022.02.01