javascript pattern(4) - Singleton pattern

August 24, 2019

이 포스트는 JavaScript Design Patterns - Better Programming - Medium 을 번역하였습니다.

Singleton pattern은 하나의 인스턴스에만 존재할 수 있는 특별한 디자인 패턴입니다. 싱글톤 클래스의 인스턴스가 없으면 새 인스턴스가 만들어지고 반환되나, 인스턴스가 이미 존재하면 기존 인스턴스에 대한 참조가 반환되는 패턴입니다.

실제 사례 중, 완벽한 사례는 mongoose (MongoDB의 유명한 Node.js ODM 라이브러리) 이며, mongoose는 싱글톤 패턴을 사용하고 있습니다.

싱글톤을 구현한 코드를 먼저 확인해 보겠습니다.

class Database {

  constructor(data) {

    if (Database.exists) {

      return Database.instance;

    }

    this._data = data;

    Database.instance = this;

    Database.exists = true;

    return this;

  }



  getData() {

    return this._data;

  }



  setData(data) {

    this._data = data;

  }

}

// usage
const mongo = new Database('mongo');

console.log(mongo.getData()); // mongo


const mysql = new Database('mysql');

console.log(mysql.getData()); // mongo

이 예제에는 싱글톤으로 구현된 Database 클래스가 있습니다. 먼저 new 연산자를 사용하여 Database 클래스 생성자를 호출, mongo 라는 객체를 만듭니다. 이때는 객체가 없기때문에 constructor function 내에서 객체가 인스턴스화 됩니다.

두번째로 mysql 이라는 객체를 만들때는, contructor 내에서 객체 (instance) 가 존재하고 있기 때문에 새 객체가 인스턴스화 되지 않고 이전에 인스턴스화된 객체, 즉 mongo 객체에 대한 참조가 반환됩니다.

...