2024. 10. 2. 14:37ㆍ카테고리 없음
싱글톤을 사용하는 이유
1. 프로그램 내에서 단 하나의 인스턴스만 생성하기 위함이다.
GameManager 클래스의 경우, 게임을 관리하는 객체가 여러 개 있으면 게임 로직이 꼬이거나 문제가 발생할 수 있기 때문에 하나의 인스턴스만을 생성해서 관리하기 위함이다.
2. 전역에서 접근 가능하게 만들기 위함이다.
싱글톤 패턴을 사용하면 특정 클래스의 인스턴스를 어디서든 전역적으로 접근할 수 있기때문이다.
GameManager.Instance 를 통해 프로그램 내 모든 곳에서 동일한 GameManager 인스턴스에 접근할 수 있습니다.
싱글톤을 만드는 3가지 방법
첫번쨰 ( 싱글톤 인스턴스를 담을 상자하나 = 필드 ) ( 필드 접근제한자 private 밑 static으로 생성 )
private static GameManager _instance;
-> instance 필드를 private으로 만들어준다.
두번쨰 (담은상자를 어떻게 전달해줄건지 만드는 로직하나) (메서드 접근제한자 public 과 static을 생성)
인스턴스 담을 변수를 만들어 줬으면 그거를 가지고 이제 어떻게 전달해 줄건지를 만드는 로직을 만들어 줘야한다.
public static GameManager Instance
{
get
{
if (_instance == null)
{
_instance = new GameManager();
}
return _instance;
}
private set { }
}
세번째 ( 생성자를 private으로 생성 )
private GameManager() { }
-> 매니저 클래스 생성자를 private으로 만들지 않으면 인스턴스가 생성되기 때문이다.
중요!!!!!!
그래서 GameManger안에서 한번만 인스턴스가 생성되게 만들어 주는 메서드를 만들어주면서 생성자를 private으로 만들어 줘야한다.
싱글톤 사용 예제 코드
public class GameManager
{
private static GameManager _instance; //첫번째 인스턴스 담을 변수 선언
public static GameManager Instance //두번째 그 인스턴스를 어떻게 전달해줄건지 담은 메서드
{
get
{
if (_instance == null)
{
_instance = new GameManager();
}
return _instance;
}
private set { }
}
public Creature Player { get; private set; }
private GameManager() { } //세번째 생성자를 private으로 생성해주기
public void Init(Creature player) //인스턴스 하나만 만드는 로직 생성
{
Player = player;
}
}
총정리
싱글톤 패턴을 사용하는 이유는 단 하나의 인스턴스만 생성하고, 이를 전역적으로 접근 가능하게 만들기 위해서이다. 게임 관리와 같은 중요한 역할을 하는 객체가 여러 개 생기지 않도록 방지하고, 어디서든 동일한 인스턴스에 접근할 수 있도록 하기 위해 사용된다.