싱글톤 패턴 (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 사용자이기 때문이다. ㅋㅋ