싱글톤은 한 번만 인스턴스화 될 수 있고 전역적으로 액세스할 수 있는 클래스이다. 단일 인스턴스는 응용 프로그램 전체에서 공유될 수 있으므로 싱글톤은 응용 프로그램의 전역 상태를 관리하는데 유용하다.
전역 상태관리할 때, 사용하기 좋은 패턴이라고 생각이 든다.
먼저, ES2015 클래스를 사용하여 싱글톤이 어떻게 보일 수 있는지 보기. Counter 클래스 구현 예제.
getInstance
메서드.getCount
메서드increment
메서드decrement
메서드let counter = 0;
class Counter {
getInstance() {
return this;
}
getCount() {
return counter;
}
increment() {
// 값을 반환해도 되는지 모르겠지만 예제에서는 이와 같이 사용.
return ++counter;
}
decrement() {
return --counter;
}
}
하지만, 이 클래스는 싱글톤의 기준을 충족하지 않는다. 싱글톤은 한 번만 인스턴스화될 수 있어야 한다. 현재로서는 여러 개의 Counter
클래스 인스턴스를 생성할 수 있다.
let counter = 0;
class Counter {
getInstance() {
return this;
}
getCount() {
return counter;
}
increment() {
return ++counter;
}
decrement() {
return --counter;
}
}
const counter1 = new Counter();
const counter2 = new Counter();
console.log(counter1.getInstance() === counter2.getInstance());
new
메서드를 두 번 호출함으로써, counter1
과 counter2
는 서로 다른 인스턴스로 설정된다. counter1
과 counter2
의 getInstance
메서드로 반환된 값은 사실상 서로 다른 인스턴스를 가리키는 참조를 반환했다. 엄밀히 말하면 동일하지 않다.
Counter
클래스가 오직 한 인스턴스만 생성되도록 보장하겠다.