특정 클래스의 인스턴스가 오직 하나만 존재하도록 보장하는 디자인 패턴. 주로 상태를 공유하거나 공통된 리소스를 관리할 때 사용된다.
class Singleton{
constructor(){
if(Singleton.instance){
return Singleton.instance;
}
this.#data={};
Singleton.instance=this;
}
getData(){
return this.data;
}
setData(key,value){
this.data[key]=value;
}
}
// 사용 예시
const singleton1=new Singleton();
const singleton2=new Singleton();
singleton1.setData('name','Singleton Pattern');
console.log(singleton2.getData()); // {name:'Singleton Pattern'}
console.log(singleton1===singleton2); // true
이미 인스턴스가 존재하는 경우 그 인스턴스를 반환하고, 그렇지 않은 경우 새로운 인스턴스를 생성한다.
싱글톤 객체가 사용된 코드에서는 단위 테스트 수행이 어려워진다. 단일 인스턴스가 애플리케이션 코드의 여러 영역에 걸쳐 공유되기 때문에, 작은 기능 단위로 나눠 서로 독립적으로 수행되어야 하는 테스트를 구현하는데 어려움이 있다.
https://seongjin.me/woowacourse-three-design-patterns-in-javascript/