싱글톤 패턴

싱글톤은 한 번만 인스턴스화 될 수 있고 전역적으로 액세스할 수 있는 클래스이다. 단일 인스턴스는 응용 프로그램 전체에서 공유될 수 있으므로 싱글톤은 응용 프로그램의 전역 상태를 관리하는데 유용하다.

전역 상태관리할 때, 사용하기 좋은 패턴이라고 생각이 든다.

먼저, ES2015 클래스를 사용하여 싱글톤이 어떻게 보일 수 있는지 보기. Counter 클래스 구현 예제.

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 메서드를 두 번 호출함으로써, counter1counter2는 서로 다른 인스턴스로 설정된다. counter1counter2getInstance 메서드로 반환된 값은 사실상 서로 다른 인스턴스를 가리키는 참조를 반환했다. 엄밀히 말하면 동일하지 않다.

jspat-52_zkwyk1.webm

Counter 클래스가 오직 한 인스턴스만 생성되도록 보장하겠다.