GameDev/[Unity]

[유니티]싱글톤(Singleton) 패턴이란?

Bit by Bit 2024. 12. 4. 02:13
728x90

 안녕하세요? 이번 글에서는 게임 개발에서 자주 사용하는 싱글톤(Singleton) 패턴에 대해 알아보려고 합니다. 싱글톤은 특히 Unity에서 전역적으로 관리해야 하는 객체를 생성할 때 매우 유용한 디자인 패턴인데요, 초보 개발자분들께도 쉽게 이해할 수 있도록 개념과 예제를 소개해드릴게요. 💡


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

싱글톤 패턴은 클래스의 인스턴스를 하나만 생성하고, 어디서든 이 인스턴스에 접근할 수 있도록 보장하는 디자인 패턴입니다.

왜 싱글톤을 사용할까요?

  1. 전역 접근 가능: 게임의 중요한 매니저(예: GameManager, AudioManager 등)를 어디서나 접근할 수 있게 해줍니다.
  2. 메모리 관리 용이: 동일한 객체를 여러 번 생성하는 것을 방지하여 자원을 절약합니다.
  3. 코드 간결화: 하나의 인스턴스를 공유함으로써 코드 유지보수가 쉬워집니다.

하지만 싱글톤을 남발하면 결합도가 높아져 테스트와 유지보수가 어려워질 수 있으니 주의가 필요합니다. 🚨


Unity에서 싱글톤 구현하기 🔨

Unity에서 싱글톤은 MonoBehaviour를 상속한 클래스에 주로 적용됩니다. 아래는 가장 간단한 Unity 싱글톤 구현 예제입니다.

using UnityEngine;

public class GameManager : MonoBehaviour
{
    // 싱글톤 인스턴스
    public static GameManager Instance { get; private set; }

    private void Awake()
    {
        // 싱글톤 인스턴스 초기화
        if (Instance == null)
        {
            Instance = this;
            DontDestroyOnLoad(gameObject); // 씬 전환 시에도 파괴되지 않도록 설정
        }
        else
        {
            Destroy(gameObject); // 중복되는 인스턴스는 삭제
        }
    }

    public void GameStart()
    {
        Debug.Log("Game Started!");
    }
}

코드 분석 👀

  1. public static GameManager Instance
    • 싱글톤 인스턴스를 전역적으로 접근할 수 있도록 설정합니다.
  2. Awake()
    • 싱글톤 인스턴스를 초기화하며, 중복 생성되지 않도록 관리합니다.
  3. DontDestroyOnLoad(gameObject)
    • 씬이 전환되더라도 해당 객체가 파괴되지 않도록 보장합니다.
  4. Destroy(gameObject)
    • 이미 인스턴스가 존재한다면, 새롭게 생성된 객체를 파괴합니다.

사용 예시 🎮

싱글톤을 어떻게 사용할 수 있을까요?

  1. GameManager를 호출하여 게임 시작하기
    • GameManager 스크립트를 빈 GameObject에 추가합니다.
  2. 다른 스크립트에서 호출하기:
public class Player : MonoBehaviour
{
    private void Start()
    {
        GameManager.Instance.GameStart(); // 싱글톤 인스턴스 호출
    }
}

싱글톤 사용 시 주의사항 ⚠️

  1. Thread-Safe
    • Unity에서는 싱글톤이 주로 메인 스레드에서 사용되므로 일반적으로 쓰레드 세이프 문제가 없지만, 멀티스레드를 사용하는 경우엔 주의하세요.
  2. 너무 많은 싱글톤 사용 금지
    • 싱글톤을 남발하면 프로젝트 구조가 복잡해지고, 의존성이 커질 수 있습니다. 꼭 필요한 경우에만 사용하세요.
  3. 테스트하기 어려울 수 있음
    • 싱글톤은 코드 간 결합도를 높일 수 있으니, 의존성을 낮출 수 있는 설계도 고려해보세요.

 

 Unity에서 싱글톤은 매우 강력한 패턴으로, 게임 개발을 효율적으로 만들어줍니다. 특히 게임 내에서 하나의 상태를 공유해야 하는 매니저 클래스를 관리하는 데 유용하죠! 하지만 남용하지 않고 필요에 따라 적절히 사용하는 것이 중요합니다. 

싱글톤 패턴에 대해 더 궁금한 점이 있다면 댓글로 남겨주세요! ✍️
다음에도 유용한 Unity 팁으로 찾아뵙겠습니다. 감사합니다! 

728x90