오직 단 하나의 인스턴스 객체만을 생성할 수 있게 강제하는 패턴이다.
보통 Manager Class가 싱글톤으로 구현된다.
(NetworkManager 라던지 객체가 하나 이상 있어서는 안되는 Class들)
사용 예시)
public Class NetworkManager
{
private NetworkManager();
private NetworkManager m_instance;
public NetworkManager Instance
{
get
{
if(m_instance== null)
m_instance = new NetworkManager();
return m_instance;
}
public void SendLogin()
{
// 로그인을 하기 위한 API를 호출한다고 치고...
}
}
public Class TestMain
{
public void Main()
{
NetworkManager.Instance.SendLogin();
}
}
대충 위와 같이 사용할 수 있다.
핵심은 private NetworkManager();
생성자를 private로 막음으로서 외부에서 객체를 못 만들게 하는 것이다.
추가로
현재 우리 프로젝트에서 싱글톤을 이상하게 쓰고 있어서 확인을 해봤다.
private 생성자가 없는 Singleton? Class가 있고 그 Class를 상속받는 Manager Class가 있다. (아마도 Instance를 얻는 구문을 각 Manager Class들마다 구현해주기 싫어서였겠지..)
근데 이것은 실제 Singleton이 아니다. 생성자가 private가 아니라서 new를 통해 객체 생성이 가능하다.
그렇다고 private 생성자를 만들면 상속받는 Manager Class들은 보호 수준으로 에러가 발생한다. 그리고 이 에러를 잡기 위해 protected로 바꾸면 원점으로 돌아온다. 외부에서 new가 가능해진다.
결론은 몇줄 안되니까 그냥 쓰길 바란다.
'프로그래밍 > 디자인패턴' 카테고리의 다른 글
Strategy (스트레티지) (0) | 2020.04.09 |
---|---|
FSM (유한 상태 머신) (0) | 2020.04.08 |
Factory (팩토리) (0) | 2020.04.08 |
Observer (옵저버) (0) | 2020.04.07 |
디자인패턴 (0) | 2020.04.07 |