싱글톤 패턴 (Singleton pattern)
요약
인스턴스를 사용할 때, 똑같은 인스턴스를 다시 생성하지 않고 재활용하기 위한 패턴
쓰는 이유는?
- 메모리 낭비 방지: 인스턴스(객체)를 새로 선언할 때 마다 메모리를 새로 할당 받게 되는데, 동일한 객체인 경우 새로 할당 받지 않고 재사용하므로써 메모리 낭비를 하지 않게 됨.
- 데이터 공유: 싱글톤 패턴을 사용하게 되면 전역(혹은 최상단)에 인스턴스가 생성된다. 따라서 다른 인스턴스와 데이터를 공유하기 용이해진다.
예제
TypeScript
출처: https://refactoring.guru/design-patterns/singleton/typescript/example
1class Singleton {2 private static instance: Singleton;34 /**5 * 싱글톤의 생성자는 `new` 연산자를 사용한 직접 생성을 방지해야 하기 위해6 * 항상 private이여야 합니다.7 */8 private constructor() { }910 /**11 * 싱글톤 인스턴스에 대한 엑세스를 제어하는 정적 메소드12 *13 * 이 구현을 사용하면 각 하위 클래스의 인스턴스를 하나만 유지하며14 * Singleton 클래스를 하위 클래스로 만들 수 있습니다.15 */16 public static getInstance(): Singleton {17 if (!Singleton.instance) {18 Singleton.instance = new Singleton();19 }2021 return Singleton.instance;22 }2324 /**25 * 마지막으로, 모든 싱글톤은 인스턴스에서 실행할 수 있는26 * 비즈니스 로직을 정의해야 합니다.27 */28 public someBusinessLogic() {29 // ...30 }31}3233/**34 * 클라이언트 코드.35 */36function clientCode() {37 const s1 = Singleton.getInstance();38 const s2 = Singleton.getInstance();3940 if (s1 === s2) {41 console.log('Singleton works, both variables contain the same instance.');42 } else {43 console.log('Singleton failed, variables contain different instances.');44 }45}4647clientCode();
예제가 하필 TypeScript인 이유는, 내가 TypeScript 사용자이기 때문이다. ㅋㅋ