it공부 (개념)/javascript

Singleton pattern?(싱글톤패턴) 개념 및 Typescript에서 구현하기

cantor 2023. 1. 23. 14:18

Miscellaneous icons created by Pixel perfect - Flaticon

Singleton(싱글턴)?

    • 일반적인 용어: "Single"에 하나를 의미하는 접미사 "ton"을 붙여서 "단독"의 의미를 강화한 단어.

      ex)   singleton (카드): 카드 한 장
              singleton (사람): 자식이 없는 사람,  혹은 가족이 없는 개인.

 

    • 프로그래밍 용어 Singleton pattern: 하나의 class(클래스)가 하나의 instance(인스턴스)만 갖는 것을 보장하는 디자인.



Singleton Pattern의 장점

    • 하나의 class가 하나의 instance만 생성하도록 함으로써,
      메모리 사용을 줄이고 시스템성능을 향상시킬 수 있다.
    • instance가 하나뿐이니, 기억할 이름도 하나뿐이다.
      즉 코드가 길어져도 관리 및 재사용이 쉽다.
  •  테스트용 코드 생성에 좋다.



Typescript에서 Singleton pattern구현하기

class SingletonClass {
    private _id: string;
    private static instance: SingletonClass;
     // id와 instance를 private로 선언, 이 클래스 내부에서만 접근 가능하다.

    private constructor(id: string) {
        this._id = id;
    }
    //instance의 생성중 초기화를 담당하는 costurctor를 private으로 선언했다
    // 즉 instace의 초기화는 class 내부접근을 통해서만 이루어진다.
    // const singletonclass = new Singletonclass("hello"); 로 instance 선언시, 
    // constructor에 접근이 불가능하므로 오류가 일어난다.

    
    static getInstance(id: string) {
        if (SingletonClass.instance) {
            return this.instance;
        }
        this.instance = new SingletonClass(id);
        return this.instance;
    }
     // getInstance를 static으로 선언함으로써, instance 생성전에
     // getInstance를 호출 할 수있게 만들었다.
     
     // 호출시 instance가 없을경우 새로 생성하여 초기화후 반환한다.
     // 만약 instance가 존재할시 그 instance를 반환한다.
}

const singletonpattern = SingletonClass.getInstance("singleID");
console.log(singletonpattern.id);



 

출력결과

 

 

3줄 요약

 

  1. singleton pattern이란 하나의 instance만 생성할 수 있도록 class를 정의하는 디자인 패턴이다.
  2. "private" 접근제어자로 "constructor"를 class 내부에서만 접근할 수 있게 설정한다.
    -instance를 "new" 키워드로 직접 생성하는 것을 막는다.
  3. "static" 접근제어자로 instance를 생성하는 getInstance 메서드를 정의한다.
    -instance를 메서드를 통해 생성, 반환받게 한다.