싱글톤 패턴은 전체 시스템에서 하나의 인스턴스만 존재하도록 보장하는 객체 생성패턴이다.
동일 클래스로 new 를 해도 인스턴스 하나만 존재한다는 것이다.싱글톤 패턴을 사용하면 고정된 메모리 영역에 인스턴스 하나만을 사용하기 때문에 메모리 낭비를 방지할 수 있다. 또한, 싱글톤으로 만들어진 인스턴스는 전역이기 때문에 다른 클래스의 인스턴스들이 데이터를 공유하기 쉬워진다.
하지만, 싱글톤 인스턴스가 너무 많은 일을 하거나 많은 데이터를 공유한다면, 시스템의 결합도가 높아지기 때문에 주의해야 한다. 결합도가 높아지면 유지보수(수정과 테스트)가 어려워진다.
객체 자체에는 접근이 불가능해야함
객체에 대한 접근자(비공개 멤버: 클로저)를 사용해 실제 객체를 제어할 수 있다.
객체는 단 하나만 만들어지며, 해당 객체를 공유함
class Singleton{
static instance;
constructor(){
if(instance) return instance;
instance = this;
}
}
var firstSingleton = new Singleton();
var secondSingleton = new Singleton();
console.log(firstSingleton === secondSingleton); // true
console.log(instance === firstSingleton); // true
class Singleton {
static #instance;
constructor() {
if(Singleton.#instance) return Singleton.#instance;
Singleton.#instance = this;
}
}
let a = new Singleton();
let b = new Singleton();
console.log(a === b);
// -> true
class SingleCat {
static instance;
constructor(name) {
if(!Singleton.instance) {
Singleton.instance = this;
}
return Singleton.instance;
}
speak() {
console.log(this.name,'meow')
}
}
let kitty = new SingleCat('kitty');
let nabi = new SingleCat('nabi');
kitty.speak(); //kitty, meow
nabi.speak(); //kitty, meow
if(!Singleton.instance) {
Singleton.instance = this; // 첫 객체에서만 조건문을 탐 .
} return Singleton.instance;