Programing/javascript

자바스크립트 Singleton Pattern

Dongkkase 2025. 4. 19. 08:43
반응형

Singleton Pattern(싱글턴 패턴) 은 특정 클래스의 인스턴스를 단 하나만 생성하도록 제한하는 디자인 패턴입니다. 이 패턴은 전역 상태를 관리할 때 유용하며, 애플리케이션 설정, DB 연결, 로그 기록 등에서 자주 활용됩니다.


🧱 Singleton Pattern이란?

Singleton Pattern은 하나의 인스턴스를 생성하고, 이를 어디서든 접근할 수 있도록 보장하는 구조입니다. 자바스크립트에서는 클로저와 모듈 패턴을 활용하여 구현됩니다.

const Singleton = (function () {
    let instance;

    function createInstance() {
        return { timestamp: Date.now() };
    }

    return {
        getInstance: function () {
            if (!instance) {
                instance = createInstance();
            }
            return instance;
        }
    };
})();

const a = Singleton.getInstance();
const b = Singleton.getInstance();
console.log(a === b); // true

✅ 장점

  1. 전역 인스턴스 보장: 시스템 전체에서 동일한 객체를 공유할 수 있음
  2. 리소스 절약: 객체를 한 번만 생성하므로 메모리 낭비가 없음
  3. 중앙 집중형 관리: 설정, 상태 관리 등에서 일관성을 유지할 수 있음

❌ 단점

  1. 테스트 어려움: 전역 상태가 테스트 격리를 어렵게 만들 수 있음
  2. 숨은 의존성: 객체 간 결합도가 높아져 코드 유연성이 떨어질 수 있음
  3. 클래스 간 의존성 증가: 리팩토링이나 유지보수 시 영향 범위가 넓음

🛠️ 실전 예시: 앱 설정 관리 객체

const Config = (function () {
    let instance;

    function createConfig() {
        return {
            apiUrl: 'https://api.example.com',
            theme: 'dark',
            version: '1.0.0'
        };
    }

    return {
        getConfig: function () {
            if (!instance) {
                instance = createConfig();
            }
            return instance;
        }
    };
})();

const config1 = Config.getConfig();
const config2 = Config.getConfig();

console.log(config1 === config2); // true

🧩 결론

Singleton Pattern은 하나의 인스턴스를 공유할 필요가 있을 때 매우 유용한 구조입니다. 하지만 무분별한 사용은 전역 상태로 인한 사이드 이펙트와 테스트 어려움으로 이어질 수 있으므로, 반드시 사용 목적이 명확할 때 활용하는 것이 바람직합니다.

반응형