본문 바로가기

Algorithms and Data Structures/patterns

[Design Pattern] 싱글톤 패턴

1. Singleton Pattern

- 인스턴스가 단 한 개만 생성되도록 의도한 패턴이다.

- 이 패턴의 주 목적은 단일 객체가 전역적으로 접근 가능하도록 하고, 이 객체를 통해 중앙화된 관리를 제공하는 것이다.

- 하나의 인스턴스만 필요한 경우, 특정 데이터를 여러 인스턴스에서 공유해야하는 경우 등의 상황에서 사용된다.

- 앱의 상태를 관리하는 클래스를 생성할 때 사용할 수 있다.

https://devmoony.tistory.com/43

 

 

2-1) 클로저를 이용한 함수 예시

const Singleton = (function () {
  // 인스턴스 변수
  let instance;

  // 싱글톤 객체 생성
  function createInstance() {
    // 객체 생성 및 초기화
    const object = new Object("Only one instance.");

    return object;
  }

  return {
    // 싱글톤 인스턴스 반환 메서드
    getInstance: function () {
      if (!instance) {
        instance = createInstance();
      }
      return instance;
    },
  };
})();

// 테스트
const instance1 = Singleton.getInstance();
const instance2 = Singleton.getInstance();

console.log(instance1 === instance2); // true

 

2-2) 클래스 문법 예시

class Singleton {
  private data:string;
  private static instance:Singleton;

  constructor() {
    if (!Singleton.instance) {
      // 인스턴스가 없을 경우에만 인스턴스를 생성
      this.data = "Only one instance.";
      Singleton.instance = this;
    }

     return Singleton.instance;
  }

  getData() {
    return this.data;
  }
  
  static getInstance() {
    if(this.instance) return this.instance
    
    this.instance = new Singleton();
    return this.instance;
  }
}

// 테스트
const instance1 = new Singleton();
const instance2 = Singleton.getInstance();

console.log(instance1 === instance2); // true
console.log(instance1.getData()); // "I am the instance."
console.log(instance2.getData()); // "I am the instance."

*싱글톤 패턴은 new 키워드를 사용하지 못하도록 constructor를 private하게 관리하기도 한다. (getInstance 메소드로만 인스턴스에 접근 가능)

  -> 정적(static) 메소드만 존재하는 클래스를 만들 때 사용하기도 함.

  -> 객체를 리턴하는 함수를 팩토리 함수라 부르는데, 클래스를 팩토리 함수처럼 사용할 때 이러한 패턴을 이용하기도 함.

 

'Algorithms and Data Structures > patterns' 카테고리의 다른 글

[알고리즘] Frequency Counters  (0) 2022.07.11