싱글톤 ( Singleton )
포스트
취소

싱글톤 ( Singleton )

해당 포스트는 개인 프로젝트인 blequotes 마무리 포스트입니다.

🛹 싱글톤 ( Singleton )

클래스의 인스턴스를 하나만 생성하는 패턴입니다.

인스턴스가 단 하나라는 의미는 하나의 인스턴스를 모두가 공유해서 사용할 수 있다는 의미입니다.
따라서 메모리를 아끼면서 데이터를 쉽게 공유할 수 있습니다.

하지만 잘못 사용하면 데이터의 흐름 추적이 어려워지기 때문에 주의해야 합니다.

🧑‍💻 구현 방법

아래 예시는 웹에서 만든 mario게임을 만들었을 때 사용했던 코드의 일부분입니다.
( 아쉽게도 버그가 많고 수정할 엄두가 안납니다… 🥲 )

정적 변수를 이용해서 구현합니다.
정적 변수를 사용하면 클래스가 갖는 속성으로 변수를 등록할 수 있습니다.

(1)을 보시면 static을 이용해서 정적 변수를 선언하고, (2)에서 하나의 인스턴스만 생성하도록 설계했습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/**
 * 맵 생성과 관련된 모든 처리를 관리할 관리자 클래스 ( 싱글톤 )
 */
export default class MapManager {
  // (1)
  static instance: MapManager;

  // (2)
  constructor() {
    // 싱글톤으로 구현
    if (MapManager.instance) return MapManager.instance;

    MapManager.instance = this;
  }

  /**
   * 맵 성성 함수
   * @param type 맵의 종류 선택
   * @param blocks 생성할 블록을 담을 배열
   */
  CreateMap(type: MapType, blocks: Block[]) {
    if (type === "stairs") {
      this.createStairs(blocks);
    }
  }

  /**
   * 계단맵 생성
   * @param 생성할 블록을 저장할 블록 배열
   */
  private createStairs(blocks: Block[]) {
    // ... 생략
  }
}

👏 사용 방법

1
2
3
4
5
6
const mapManager1 = new MapManager();
const mapManager2 = new MapManager();

console.log(mapManager1 === mapManager2); // true

mapManager1.createMap();

📮 레퍼런스

  1. 웹으로 동작하는 mario게임
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.

개인 프로젝트 - blequotes 마무리

SOP와 CORS와 Preflight와 Credentials