💡Aha!

싱글톤 패턴 (Singleton pattern)

요약

인스턴스를 사용할 때, 똑같은 인스턴스를 다시 생성하지 않고 재활용하기 위한 패턴

쓰는 이유는?

  • 메모리 낭비 방지: 인스턴스(객체)를 새로 선언할 때 마다 메모리를 새로 할당 받게 되는데, 동일한 객체인 경우 새로 할당 받지 않고 재사용하므로써 메모리 낭비를 하지 않게 됨.
  • 데이터 공유: 싱글톤 패턴을 사용하게 되면 전역(혹은 최상단)에 인스턴스가 생성된다. 따라서 다른 인스턴스와 데이터를 공유하기 용이해진다.

예제

TypeScript

출처: https://refactoring.guru/design-patterns/singleton/typescript/example

class Singleton {
    private static instance: Singleton;

		/**
     * 싱글톤의 생성자는 `new` 연산자를 사용한 직접 생성을 방지해야 하기 위해
     * 항상 private이여야 합니다.
     */
    private constructor() { }

    /**
     * 싱글톤 인스턴스에 대한 엑세스를 제어하는 정적 메소드
     *
     * 이 구현을 사용하면 각 하위 클래스의 인스턴스를 하나만 유지하며
     * Singleton 클래스를 하위 클래스로 만들 수 있습니다.
     */
    public static getInstance(): Singleton {
        if (!Singleton.instance) {
            Singleton.instance = new Singleton();
        }

        return Singleton.instance;
    }

    /**
     * 마지막으로, 모든 싱글톤은 인스턴스에서 실행할 수 있는
     * 비즈니스 로직을 정의해야 합니다.
     */
    public someBusinessLogic() {
        // ...
    }
}

/**
 * 클라이언트 코드.
 */
function clientCode() {
    const s1 = Singleton.getInstance();
    const s2 = Singleton.getInstance();

    if (s1 === s2) {
        console.log('Singleton works, both variables contain the same instance.');
    } else {
        console.log('Singleton failed, variables contain different instances.');
    }
}

clientCode();

예제가 하필 TypeScript인 이유는, 내가 TypeScript 사용자이기 때문이다. ㅋㅋ

ⓒ 2022 Dohyun Jung.
Made with ☕️.