디자인 패턴 싱글톤 패턴

ohaeseong·2022년 2월 12일
0

오늘은 정말 간단하게 싱글톤 패턴이 무엇인지 살펴보겠습니다.

싱글톤 패턴의 정의를 간단히 요약하자면 하나의 인스턴스를 만들어 이를 여러 클래스에서 공유하여 사용하는 디자인 패턴입니다.

TS를 예제로 코드 부터 보시죠

class Printer {
  private static instance: Printer; // 공유할 인스턴스 static으로 선언하여 생성자 함수를 선언하지 않고 메모리를 할당 시켜줌
  private constructor() {} // 외부에서 printer의 생성자 함수 접근을 막기 위한 private 선언

  public static getPrinter() { // static으로 선언하여 생성자 함수를 사용하지 않고 메모리를 할당시켜주어 getPrinter함수에 접근 가능하도록 함
    // Printer의 instance가 없다면 생성자 함수를 통해 인스턴스를 만들어 준다. 반대로 기존에 인스턴스가 만들어져 있다면 생성자 함수를 호출하지 않고 기존에 인스턴스를 사용한다.
    if (!this.instance) { 
      this.instance = new Printer();
    }

    return this.instance;
  }
}

console.log(Printer.getPrinter()); // 같은 인스턴스를 가져옴
console.log(Printer.getPrinter()); // 같은 인스턴스를 가져옴

가장 기본적인 싱글톤 패턴의 코드 예제입니다. 이렇게 하나의 인스턴스를 만들어 여러 곳에서 공유하며 사용하는 것이 싱글톤 패턴 디자인입니다.

싱글톤 패턴을 쓰면 좋은점?

  1. 메모리 측면에서 이득을 볼 수 있습니다. 최초에 생성자 함수로 만들어낸 인스턴스 하나만이 메모리 영역을 차지하기 때문에 여러개의 인스턴스를 만들어 사용했을 때보다 메모리 측면에서 이득을 보게 되고, 하나의 인스턴스를 공유하며 사용하기 때문에 속도 측면에서도 더 좋은 성능을 보여 줄 수 있습니다.
  2. 같은 데이터를 공유하기 쉽다.
    애초에 같은 인스턴스를 공유하는 디자인 패턴이기 때문에 전역적으로 쓰이는 공통 데이터를 공유하기에 유용합니다. 단, 멀티 스레드 환경에서는 여러 클래스에서 가져와 사용하게 되면 동시성의 문제가 생길 수가 있습니다. (ts는 싱글 스레드 환경이기 때문에 괜찮음)

0개의 댓글