본문 바로가기
STORAGE/JavaScript|TypeScript

싱글톤 패턴

by _wavy 2024. 4. 1.

싱글톤 패턴

객체지향 프로그래밍에서 사용되는 디자인 패턴 중 하나. 한 클래스로 하나의 인스턴스만 생성하는 패턴이다. 하나의 객체만을 위한 클래스를 작성할 때 사용한다.

TS 구현 방법

1. constructor를 private으로 만들어 인스턴스를 직접 생성하지 못하도록 한다. 이제 내부 변수인 인스턴스는 클래스 내에서만 접근할 수 있게 된다.

2. 정적 메서드인 getInstance로 클래스의 인스턴스가 존재하는지 확인하고, 없다면 새로운 인스턴스를 반환하도록 한다.

예시 코드

아래 코드에서는 MyRoom이라는 클래스에 싱글톤 패턴을 적용하여 하나의 방(인스턴스)만 생성할 수 있도록 하였다.

초기 룸넘버는 123으로 고정하고, room1을 생성한다. 세터로 룸넘버를 333으로 변경한 후 room2를 생성하여 room1과 비교해본다. 콘솔 로그 결과로 두 변수의 룸넘버가 333으로 확인된다.

이로써 MyClass 클래스로는 하나의 인스턴스만 생성할 수 있다는 것을 확인할 수 있다.

class MyRoom {
  private static instance: MyRoom;

  private constructor(private roomNumber: number) {}

  static getInstance() {
    if (!MyRoom.instance) {
      this.instance = new MyRoom(123); // static 메서드 내부에서만 private 생성자에 접근 가능
    }
    return this.instance;
  }

  get privateRoomNumber() {
    return this.roomNumber;
  }

  set privateRoomNumber(numNumber: number) {
    this.roomNumber = numNumber;
  }
}

const room1 = MyRoom.getInstance(); // 방 생성, 룸넘버 123
room1.privateRoomNumber = 333;
const room2 = MyRoom.getInstance(); // 위와 동일한 인스턴스 반환

console.log(room1, room2);
/* 
MyRoom: {
  "roomNumber": 333
},  MyRoom: {
  "roomNumber": 333
} 
*/

'STORAGE > JavaScript|TypeScript' 카테고리의 다른 글

dragAndDrop API  (0) 2024.04.02
this의 동적 바인딩👆  (0) 2024.03.31
동적으로 css 변수 만들기  (0) 2023.09.25

댓글