말감로그

[Unity] 싱글톤 패턴 본문

Unity

[Unity] 싱글톤 패턴

habbn 2024. 7. 17. 17:29
728x90

싱글톤 패턴

싱글톤 패턴은 디자인 패턴 중 하나로, 해당 클래스의 인스턴스가 언제나 하나만 존재하도록 보장(유일성)하는 패턴입니다. 이 패턴은 주로 하나의 인스턴스만 필요한 객체에 적용된다.

외부에서 생성자를 이용한 객체 생성을 막아 전역적으로 접근할 수 있는 정적 메서드를 통해 해당 인스턴스에 접근하고 사용한다.  모든 스크립트가 써야 하는 변수나 기능을 관장하는 스크립트가 있다면, 접근의 편의와 메모리의 할당을 줄이기 위해 싱글톤 패턴을 사용한다. 예를 들어, 게임 매니저나 리소스 관리자 등이 여기에 속한다.

 

단점 

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

 

using UnityEngine;

public class DataManager : MonoBehaviour
{
    private static DataManager instance = null;
    
    // 싱글톤 인스턴스에 접근할 수 있는 정적 프로퍼티
    public static DataManager Instance
    {
        get
        {
            if (instance == null)
            {
            	return null;
            }
            return instance;
        }
    }
    
    private void Awake()
    {
    	if (instance == null)
        {
            // 인스턴스가 없으면 이 객체를 싱글톤 인스턴스로 설정
            instance = this;
         }
         else
         {
            // 이미 인스턴스가 있다면 이 객체를 파괴(유일성 보장)
            Destroy(this.gameObject);
         }
         
         //씬 전환되어도 유지되도록 설정
         DontDestroyOnLoad(this.gameObject);
    }

 

보안 상 private으로 스크립트의 instance를 생성한다 그러면 어떻게 외부에서 접근할 수 있는것인가?

전역적으로 접근할 수 있도록 정적 메소드/프로퍼티를 생성하여 접근하면 된다.

 

그리고 static을 사용했기에 어느 스크립트든 DataManager.instance.원하는 함수() 를 입력해주기만 하면 사용이 가능하다.

 

따라서 싱글톤은 전역에서 접근이 가능하기에 원하는 스크립트에서 불러와서 마음대로 사용이 가능하다. 그래서 주로 게임의 전체를 관장하는 스크립트에 싱글톤을 사용한다.

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

 

 


<참고>

 

유니티) 싱글톤/싱글턴 디자인 패턴에 대해. (사용법, 사용이유, 장단점)

이번 글에선 싱글톤 패턴에 대하여 알아보도록 하겠다. 보통 부르는 용어가 싱글톤과 싱글턴이 있는데, 이 글에선 싱글톤으로 부르도록 하겠다. 이번 글에서는 크게 사용이유, 사용법, 장단점 3

alpaca-code.tistory.com

 

728x90