생성 패턴 - 싱글톤 패턴
#DesignPattern
싱글톤 패턴
개념
싱글톤 패턴은 클래스에서 인스턴스를 하나만 만들게 강제하는 패턴이다. 최초 생성 이후에 다시 인스턴스를 생성하려 하면, 새로 만들지 않고 기존의 인스턴스를 반환한다. 싱글톤 패턴은 데이터베이스 연결 설정이나 사용자 설정(Config)처럼, 전역에서 접근 및 공유 해야하는 단 하나의 객체가 필요할 때 유용하다.
let instance;
class Singleton {
constructor() {
if (instance) return instance;
instance = this;
}
static getInstance() {
if (!instance) {
instance = new Singleton();
}
return instance;
}
}
싱글톤 패턴과 정적 객체(변수) 비교
싱글톤 패턴과 정적 객체(변수)는 프로그램 내에서 하나만 존재하고, 전역으로 접근 가능하다는 점이 서로 같다. 그렇다면 둘은 어떤 차이점이 있을까?
1. 객체로서의 활용(유연성)
싱글톤은 클래스의 ‘인스턴스(객체)‘이다. 따라서 인터페이스를 구현하거나, 다른 클래스에 인자로 넘겨주는 등 객체 지향적인 활용이 가능하다. 반면 정적 클래스(객체 리터럴)는 단순한 기능의 집합이나 데이터 덩어리에 가까워, 구조적인 확장이 어렵다.
2. 지연된 초기화
프로그램 시작과 동시에 메모리를 점유하는 정적 객체(변수)와는 다르게, 싱글톤 패턴을 사용하면 개발자가 원하는 타이밍에 인스턴스를 만들 수 있다. 즉, 사용자가 getInstance()를 호출하기 전까지는 메모리를 낭비하지 않을 수 있다.
3. 확장성(상속)
싱글톤 패턴은 서브클래싱 형식으로 extends를 써 확장이 가능하다. 반면 정적 객체(변수)는 상속을 통한 확장이 어렵다.
JS에서의 싱글톤 패턴
JS는 C++과 달리 클래스가 없어도 바로 객체를 만들 수 있는 언어라, 싱글톤 패턴을 사용해야하는 경우가 잘 없다고 한다. 리액트 같은 UI 프레임워크에서는 주로 Redux와 같은 전역 상태 관리 라이브러리가 싱글톤의 역할을 대신하는 경우가 많다.