[디자인패턴] 싱글톤

새싹감자·2023년 11월 7일
0

디자인패턴

목록 보기
1/1

 
"이 글은 개인 공부를 위해 정리한 것으로, 오류가 있을 수 있습니다."


#1 싱글톤 패턴이란?

오직 한 개의 인스턴스만 갖도록 보장.

게임을 하는 플레이어의 상태, 혹은 게임 자체의상태를 관리하는 역할의 클래스를 만들려 한다면, 이는 분명 게임에서 하나만 존재하여야 할 것이다.
로깅, 컨텐츠 로딩, 게임 저장 등 여러 내부 시스템에서 전역적인 방향에서 게임에 대한 상태를 접근해서 얻고 싶을 때에 대한 해결책을 제공한다.

이로써 어디서든 어떤 클래스에서든 누구든지, 싱글톤 클래스의 인스턴스에 접근하여 필요한 기능을 사용할 수 있다.

#2 왜 사용할까?

 

1. 한 번도 사용하지 않는다면 아예, 메모리조차 할당하지 않을 수 있다.

처음 사용될 때 초기화를 시도하는 방법으로 싱글톤을 구현한다면, 게임 내에서 사용되지 않을 경우에 아예 초기화되지 않을 것이므로 메모리를 사용하지 않게 된다.

2. 런타임에 초기화 된다.

정적 멤버 변수는 컴파일 타임에 자동으로 초기화가되는 문제가 있지만, 싱글톤은 최대한 늦게 필요한 시점에서 초기화를 시킬 수 있기 때문에, 해당 시점에는 싱글톤이 필요하는 정보를 안전하게 가져올 수 있고, 순환 참조의 문제만 없다면 다른 싱글톤끼리의 참조 또한 어렵지 않다.

3. 상속할 수 있다.

싱글톤 코드는 구현이 어느정도 고정되어 있으므로, 여러가지 관리자 클래스가 필요할 때 하나의 싱글톤 부모 클래스를 상속함으로써 구현상의 생산성을 증대시킬 수 있다.


#3 예제

 
코드 :

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, 싱글톤 패턴

profile
야망 있는 개발자(가 되어가는 중)

0개의 댓글