💡Aha!

싱글톤 패턴 (Singleton pattern)

요약

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

쓰는 이유는?

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

예제

TypeScript

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

1class Singleton {
2 private static instance: Singleton;
3
4 /**
5 * 싱글톤의 생성자는 `new` 연산자를 사용한 직접 생성을 방지해야 하기 위해
6 * 항상 private이여야 합니다.
7 */
8 private constructor() { }
9
10 /**
11 * 싱글톤 인스턴스에 대한 엑세스를 제어하는 정적 메소드
12 *
13 * 이 구현을 사용하면 각 하위 클래스의 인스턴스를 하나만 유지하며
14 * Singleton 클래스를 하위 클래스로 만들 수 있습니다.
15 */
16 public static getInstance(): Singleton {
17 if (!Singleton.instance) {
18 Singleton.instance = new Singleton();
19 }
20
21 return Singleton.instance;
22 }
23
24 /**
25 * 마지막으로, 모든 싱글톤은 인스턴스에서 실행할 수 있는
26 * 비즈니스 로직을 정의해야 합니다.
27 */
28 public someBusinessLogic() {
29 // ...
30 }
31}
32
33/**
34 * 클라이언트 코드.
35 */
36function clientCode() {
37 const s1 = Singleton.getInstance();
38 const s2 = Singleton.getInstance();
39
40 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}
46
47clientCode();

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

2024 Dohyun Jung.
Made with ☕️.