Unity에서 싱글톤 패턴(Singleton Pattern)을 사용하면 특정 클래스의 인스턴스가 오직 하나만 존재하도록 보장할 수 있습니다. 이는 많은 상황에서 유용한데, 예를 들어 게임에서 현재 상태를 저장하거나, 매니저 클래스를 구현하거나, 리소스를 로드하는 등의 작업이 있을 때 사용할 수 있습니다.
싱글톤 패턴의 구현
싱글톤 패턴을 구현하려면 다음과 같은 단계를 거칩니다.
- 클래스의 생성자를 private으로 지정하여 외부에서 인스턴스를 생성하지 못하도록 합니다.
- 클래스 내부에 private static 변수를 선언합니다.
- 클래스 내부에 public static 메서드를 만들어 private static 변수를 리턴하도록 합니다. 이 메서드를 통해 클래스 외부에서 유일한 인스턴스에 접근할 수 있습니다.
다음은 Unity C#으로 구현한 싱글톤 패턴의 예시입니다.
public class SingletonExample
{
private static SingletonExample instance;
private SingletonExample() { }
public static SingletonExample Instance
{
get
{
if (instance == null)
{
instance = new SingletonExample();
}
return instance;
}
}
public void ExampleMethod()
{
Debug.Log("ExampleMethod called");
}
}
위 코드에서 SingletonExample 클래스의 생성자는 private으로 선언되어 외부에서 인스턴스를 생성할 수 없습니다. 대신, public static 메서드인 Instance를 통해 유일한 인스턴스에 접근할 수 있습니다. Instance 메서드는 private static 변수 instance가 null일 때만 인스턴스를 생성하고, 그렇지 않으면 이미 생성된 인스턴스를 반환합니다.
싱글톤 패턴의 사용
싱글톤 패턴은 많은 상황에서 사용됩니다. 예를 들어, 게임에서 현재 상태를 저장하거나, 매니저 클래스를 구현하거나, 리소스를 로드하는 등의 작업이 있을 때 사용할 수 있습니다.
다음은 게임에서 매니저 클래스를 싱글톤 패턴으로 구현하는 예시입니다.
public class GameManager : MonoBehaviour
{
private static GameManager instance;
private GameManager() { }
public static GameManager Instance
{
get
{
if (instance == null)
{
instance = FindObjectOfType<GameManager>();
if (instance == null)
{
GameObject obj = new GameObject();
obj.name = typeof(GameManager).Name;
instance = obj.AddComponent<GameManager>();
}
}
return instance;
}
}
public void StartGame()
{
Debug.Log("Game started");
}
}
위 코드에서 GameManager 클래스는 게임 매니저 역할을 합니다. GameManager 클래스의 생성자는 private으로 선언되어 외부에서 인스턴스를 생성할 수 없습니다. 대신, public static 메서드인 Instance를 통해 유일한 인스턴스에 접근할 수 있습니다. Instance 메서드는 instance 변수가 null일 때만 인스턴스를 생성하고, 그렇지 않으면 이미 생성된 인스턴스를 반환합니다. 게임 매니저는 게임 전반에 걸쳐 유일해야 하므로, 싱글톤 패턴을 사용하여 구현합니다.
결론
Unity에서 싱글톤 패턴을 사용하면 특정 클래스의 인스턴스가 오직 하나만 존재하도록 보장할 수 있습니다. 이는 많은 상황에서 유용한데, 예를 들어 게임에서 현재 상태를 저장하거나, 매니저 클래스를 구현하거나, 리소스를 로드하는 등의 작업이 있을 때 사용할 수 있습니다.
'Unity > Design Pattern' 카테고리의 다른 글
Unity로 이해하는 상태 패턴 (State Pattern) (0) | 2023.08.09 |
---|---|
Unity로 이해하는 옵저버 패턴 (Observer Pattern) (0) | 2023.08.08 |
Unity로 이해하는 팩토리 패턴 (Factory Pattern) (0) | 2023.08.07 |
Unity로 이해하는 어댑터 패턴 (Adapter Pattern) (0) | 2023.08.06 |
Unity로 이해하는 전략 패턴(Strategy Pattern) (0) | 2023.07.20 |