"이 글은 개인 공부를 위해 정리한 것으로, 오류가 있을 수 있습니다."
오직 한 개의 인스턴스만 갖도록 보장.
게임을 하는 플레이어의 상태, 혹은 게임 자체의상태를 관리하는 역할의 클래스를 만들려 한다면, 이는 분명 게임에서 하나만 존재하여야 할 것이다.
로깅, 컨텐츠 로딩, 게임 저장 등 여러 내부 시스템에서 전역적인 방향에서 게임에 대한 상태를 접근해서 얻고 싶을 때에 대한 해결책을 제공한다.
이로써 어디서든 어떤 클래스에서든 누구든지, 싱글톤 클래스의 인스턴스에 접근하여 필요한 기능을 사용할 수 있다.
처음 사용될 때 초기화를 시도하는 방법으로 싱글톤을 구현한다면, 게임 내에서 사용되지 않을 경우에 아예 초기화되지 않을 것이므로 메모리를 사용하지 않게 된다.
정적 멤버 변수는 컴파일 타임에 자동으로 초기화가되는 문제가 있지만, 싱글톤은 최대한 늦게 필요한 시점에서 초기화를 시킬 수 있기 때문에, 해당 시점에는 싱글톤이 필요하는 정보를 안전하게 가져올 수 있고, 순환 참조의 문제만 없다면 다른 싱글톤끼리의 참조 또한 어렵지 않다.
싱글톤 코드는 구현이 어느정도 고정되어 있으므로, 여러가지 관리자 클래스가 필요할 때 하나의 싱글톤 부모 클래스를 상속함으로써 구현상의 생산성을 증대시킬 수 있다.
코드 :
class SingleCat
{
static instance;
constructor(name)
{
this.name = name
if(!SingleCat.instance) // 처음으로 인스턴스를 생성하는 경우
{
SigleCat.instance = this; // 현재의 인스턴스를 할당함
}
return SingleCat.instance // 두번째부터는 여기만 실행
}
speak()
{
console.log(this.name, 'meaw')
}
}
let sKitty = new SingleCat("kitty") // 각각 이름 설정하지만
let sNabi = new SingleCat("nabi")
sKitty.speak() // 두 객체가 처음 생성된 인스턴스를 가리킴
snabi.speak()
if(sKitty === sNabi) // 둘은 같기 때문에 조건 만족
{
console.log('they are same, Singleton')
}
else
{
console.log('they aren't same')
}
결과 :
kitty meaw
kitty meaw
they are same, Singleton
코드 출처 - [YOUTUBE] 코드없는 프로그래밍 - 디자인패턴, Singleton Pattern, 싱글톤 패턴