싱글톤패턴이란? (Singleton pattern)

하나의 클래스에 오직 하나의 인스턴스만 가지는 패턴입니다.

하나의 클래스를 기반으로 여러 개의 개별적인 인스턴스를 만들 수 있지만 그렇게 하지 않고 하나의 클래스를 기반으로 단 하나의 인스턴스를 만들어 이를 기반으로 로직을 만드는데 쓰이며 보통 데이터베이스 연결 모듈에 많이 사용됩니다.

장점

하나의 인스턴스를 기반으로 해당 인스턴스를 다른 모듈들이 공유하여 사용하기 때문에 인스턴스를 생성할 때 드는 비용이 줄어듭니다. 그렇기 때문에 “인스턴스 생성에 많은 비용”이 드는 I/O bound 작업에 많이 사용합니다.

단점

의존성이 높아지며, TDD(Test Driven Development)를 할 때 걸림돌이 됩니다. TDD를 할 때 단위 테스트를 주로 하는데, 단위 테스트는 테스트가 서로 독립적이어야 하며 테스트를 어떤 순서로든 실행할 수 있어야 합니다.

하지만 싱글톤 패턴은 미리 생성된 하나의 인스턴스를 기반으로 구현하는 패턴이므로 각 테스트마다 ‘독립적인’ 인스턴스를 만들기가 어렵습니다.

class Singleton {
		constructor() {
				if (!Singleton.instance) {
						Singleton.instance = this
				}
				return Singleton.instance
		}
		getInstance() {
				return this.instance
		}
}
const a = new Singleton()
const b = new Singleton()
console.log(a === b) // true
class Rectangle {
		constructor(height, width) {
				this.height = height;
				this.width = witth;
		}
}
const a = new Rectangle(1, 2)
const b = new Rectangle(1, 2)
console.log(a === b) // false