해당 포스트는 개인 프로젝트인
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();