[node.js] Singleton Pattern

Hyo Kyun Lee·2021년 7월 28일
0

node.js

목록 보기
23/34

1. Singleton pattern

node.js 프로그래밍에서 class의 instance는 최초 선언 및 초기화할 때
단 한번만 선언되는 구조를 말한다.

node.js를 뿐만 아니라 javascript 환경에서 class를 사용할 때 유의해야할 점이 두가지가 있다.

  • class의 instance는 단 하나만 존재한다.
  • instance는 constructor이 최초 선언되는 시점에서 단 1회 초기화된다.
  • 그 이후 instance 사용은 reuse / overwrite 로 사용해야하며, 경우에 따라 새로운 class를 재생성 해야한다.

쉽게 말하면 Singleton Pattern은 다음의 조건을 만족하는 프로그래밍 방법론이다.

  • 한 class(객체)에서 하나의 instance만 존재해야 한다.
  • 한 class(객체)에서 instance는 반드시 존재해야 한다.

2-1. instance가 없을 때 SingleTon pattern 프로그래밍 하기

한 class에서 instance가 없는 경우(생성자를 통해 instance 생성이 되지 않은 경우),
다른 class의 instance를 통해 참조하기

SingletonPattern의 기초를 알 수 있는 구문이다.

Singleton class에서 생성자가 선언이 안되어 instance가 존재하지 않을때, PrivateSingleton class의 생성자를 참조할 수 있는 경우이다.

class PrivateSingleton {
  constructor() {
    this.message = "I am an instance";
  }
}

class Singleton {
  constructor() {
    throw new Error("Use Singleton.getInstance()");
  }
  static getInstance() {
    if (!Singleton.instance) {
      Singleton.instance = new PrivateSingleton();
    }
    return Singleton.instance;
  }
}

const object = Singleton.getInstance();
console.log(object.message); // Prints out: 'I am an instance'

object.message = "Foo Bar"; // Overwrite message property
const instance = Singleton.getInstance();
console.log(instance.message); // Prints out: 'Foo Bar'

위 코드를 통해 SingleTon pattern을 구현하기 위해 유의해야할 점을 알 수 있다.

  • class의 instance는 this binding 및 접근을 위해 반드시 필요하다.
  • 하나의 class에는 하나의 instance 만이 존재해야 한다.
  • constructor 선언간 최초 1회 instance는 선언 및 생성된다.
  • instance가 없다면 다른 instance를 참조할 수 있고, 그 이후는 reusre 및 overwrite가 가능하다.

2-2. Singleton Pattern을 만족하는 프로그래밍

우리가 무심코 사용하는 javscript의 class 선언방법이 singleton pattern이다.

class를 선언하면서 constructor에 this를 통해 instance를 binding 해주는, 우리가 무심코 코딩하던 방법들이 singleton pattern이다.

singleton pattern은 생각보다 어렵지 않은 개념이지만, 개념을 확실히 알아두어야 프로그래밍을 구현하는데 수월해진다.

class Singleton {
  constructor() {
    this.message = "I am an instance";
  }
}

//OK
obj = new Singleton();
console.log(obj.message);

//No
//console.log(Singleton.message);

class와 constructor의 생성 및 해당 객체를 사용할 때, new 를 통해 인스턴스를 참조(접근)할 객체변수를 만들어야 한다는 점을 기억하자.

3. 참조링크

node.js
https://morioh.com/p/594a4acabb5c

singleton pattern
https://medium.com/swlh/node-js-and-singleton-pattern-7b08d11c726a

0개의 댓글