Singleton
특정 클래스의 인스턴스를 하나만 생성되도록 보장하는 디자인 패턴
게임이 실행되었을 때 이를 전체적으로 관리하는 게임 매니저는 반드시 하나만 존재해야한다. 만약 둘 이상 존재한다면, 어떤 게임 매니저를 따라야할지 알 수 없어 충돌이 생기기 때문이다.
이처럼 하나의 인스턴스만 보장해야할 때 사용하는 것이 싱글톤 패턴이며, 게임 개발에서 가장 많이 활용되는 패턴 중 하나이다. 게임 매니저부터 사운드 매니저 등 여러 매니저가 굉장히 많기 때문이다.
public class GameManager
{
private static GameManager instance;
public static GameManager Instance
{
get
{
if(instance == null)
{
instance = new GameManager();
}
return instance;
}
}
private GameManager(){}
}
우선 클래스를 생성하면 필드에 static
으로 인스턴스를 생성한다. 이때 생성자는private
으로 선언하여 외부에서 new
키워드로 새로운 인스턴스 생성을 하지 못하도록 하고, instance
가 필요할 때는 프로퍼티를 public static
으로 선언하여 최초에 만들어진 instance
에 접근할 수 있도록 한다.
이렇게 하면 싱글톤 패턴의 구현이 끝난 것이다. 하지만 이렇게 싱글톤 패턴을 사용해야하는 클래스가 많아질수록 위의 코드를 일일이 치는 것이 비효율적이기에, 제네릭으로 만들어 이를 활용하는 것이 가능하다.
public class Singleton<T>
{
private static T instance;
public static T Instance
{
get { return instance; }
}
}
public class SoundManager : Singleton<SoundManager> { }
이렇게 싱글톤 패턴의 제네릭을 구현하면 아래처럼 상속을 통해 쉽게 싱글톤 패턴 적용이 가능하다.