728x90
이 글은 Inflearn - Rookiss : C#과 유니티로 만드는 MMORPG 게임 개발 강의를 듣고 정리한 글입니다.

 

목차.

  1. 싱글톤 패턴이란?
  2. 코드 작성
  3. 코드 분석
  4. 결론

 

싱글톤 패턴이란?

 

싱글톤 패턴(Singleton Patten)은 소프트웨어 디자인 패턴 중 하나로, 객체를 하나만 생성하고 이를 여러 부분에서 공유하여 사용하는 패턴입니다. 이를 통해 하나의 객체 인스턴스가 어디서든 접근 가능하며, 중복 생성되지 않도록 보장합니다.

 

이번 글에서는 Unity에서 싱글톤 패턴을 어떻게 구현하고 활용하는지 살펴보겠습니다.

 

코드 작성

 

정통적인 C# 문법의 싱글톤 패턴과는 다르지만 유니티에서 사용되는 싱글톤 패턴 코드를 작성하겠습니다.

 

Managers.cs

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; } } // 유일한 매니저를 갖고온다
    // Start is called before the first frame update
    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>();
        }
    }
}

 

해당 싱글톤 패턴에 접근하는 코드입니다.

 

Player.cs

   public void Start()
    {
        Managers mg = Managers.Instance;
    }

 

위 코드의 특징을 보면

 

1. 유일성 보장 : 's_instance' 변수를 통해 단 하나의 'Manager' 객체만 존재하도록 보장합니다.

2. 게임 시작 시 초기화 : 'Init' 메서드를 호출하여 초기화하며, 이때 객체가 없다면 새로 생성합니다.

3. DontDestroyOnLoad : 게임 씬 전환 시에도 'Manager' 객체가 삭제되지않고 유지됩니다.

 

장점

1. 전역적인 접근성 : 어디서든 'Manager.Instance'를 통해 'Manager'객체에 접근이 가능하므로 각종 게임 매니저 및 리소스 관리자 등을 효율적으로 관리할 수 있습니다.

2. 중복 생성 방지 : 이미 존재하는 경우 객체를 재사용하며 중복 생성을 방지합니다.

3. 게임 씬 전환 시 유지 : 게임 씬이 전환되어도 'Manager' 객체가 유지되므로 게임 상태 및 데이터를 유지할 수 있습니다.

 

코드 분석

 

위 코드에서 'Manager' 클래스는 'MonoBehaviour'를 상속하며 하나의 게임 오브젝트로 동작합니다.

'Init' 메소드를 통해 싱글톤 인스턴스를 생성하고, 'DontDestroyOnLoad' 함수를 사용하여 씬 전환 시 삭제되지 않도록 설정합니다.

'Manager.Instance' 프로퍼티를 통해 싱글톤 객체에 접근합니다.

 

결론

 

싱글톤 패턴은 Unity와 같은 게임 엔진에서 매우 유용하게 활용됩니다.

하지만 지나치게 많은 싱글톤 객체를 만들어 남발하는 것은 좋지 않습니다.

 

일반적으로 게임의 중요한 매니저나 리소스 관리자 등에만 사용하는 것이 좋습니다.

남발할 경우 코드의 복잡성이 증가하고, 디버깅 및 테스트가 어려워질 수 있습니다.

또한, 싱글톤 객체는 전역적으로 접근할 수 있어서 부적절하게 사용하면 코드의 의존성이 복잡해지고 유지보수가 어려워질 수 있습니다.

 

따라서 싱글톤 패턴을 사용할 때는 신중하게 선택하고, 게임의 중요한 요소에만 사용하여 코드의 가독성과 유지보수성을 유지하는 것이 중요합니다.

728x90

+ Recent posts