어떤 클래스가 단 하나의 인스턴스만을 가지도록 보장하며, 이 인스턴스에 접근할 수 있는 전역적인 접근점을 제공하는 디자인 패턴
어떤 클래스에 대해 하나의 인스턴스만 필요할 때 유용
클래스의 생성자를 private으로 만들어 외부에서 직접 객체를 생성하는 것을 막음
클래스 내부에서 유일한 인스턴스를 생성하고, 이에 접근할 수 있는 정적 메서드나 속성을 제공
인스턴스가 필요한 시점에 생성
스레드 풀, 캐시, 대화상자, 사용자 설정, 레지스트리 설정을 처리하는 객체, 로그 기록용 객체, 디바이스 드라이버 등 객체를 사용할 때 인스턴스가 2개 이상이면 오류가 나는 경우, 싱글톤 패턴을 통해 인스턴스를 하나만 생성
전역 변수를 사용할 때와 마찬가지로 객체 인스턴스를 어디서든지 엑세스할 수 있게 만들 수 있으며, 전역 변수를 쓸 때처럼 여러 단점을 감수할 필요도 없음
class Singleton {
constructor() {
...
}
static instance = null;
static getInstance() {
if (!Singleton.instance) {
Singleton.instance = new Singleton();
}
return Singleton.instance;
}
}
const singleton1 = Singleton.getInstance();
const singleton2 = Singleton.getInstance();
console.log(singleton1 === singleton2); // true