디자인 패턴 1. Singleton Pattern, 싱글톤 패턴

Eddy·2023년 4월 12일
0

Javascript

목록 보기
15/27

디자인 패턴

싱글톤패턴(singleton pattern) 이란?

싱글톤 패턴은 전체 시스템에서 하나의 인스턴스만 존재하도록 보장하는 객체 생성패턴이다.
동일 클래스로 new 를 해도 인스턴스 하나만 존재한다는 것이다.

싱글톤 패턴을 사용하면 고정된 메모리 영역에 인스턴스 하나만을 사용하기 때문에 메모리 낭비를 방지할 수 있다. 또한, 싱글톤으로 만들어진 인스턴스는 전역이기 때문에 다른 클래스의 인스턴스들이 데이터를 공유하기 쉬워진다.

하지만, 싱글톤 인스턴스가 너무 많은 일을 하거나 많은 데이터를 공유한다면, 시스템의 결합도가 높아지기 때문에 주의해야 한다. 결합도가 높아지면 유지보수(수정과 테스트)가 어려워진다.


특징

객체 자체에는 접근이 불가능해야함
객체에 대한 접근자(비공개 멤버: 클로저)를 사용해 실제 객체를 제어할 수 있다.
객체는 단 하나만 만들어지며, 해당 객체를 공유함


싱글톤 패턴

es7

class Singleton{
  static instance;
 
  constructor(){
    if(instance) return instance;
    instance = this;
  }
}
 
var firstSingleton = new Singleton();
var secondSingleton = new Singleton();
 
console.log(firstSingleton === secondSingleton); // true
console.log(instance === firstSingleton); // true

es10

class Singleton {
    static #instance;
    
    constructor() {
        if(Singleton.#instance) return Singleton.#instance;
        Singleton.#instance = this;
    }
}

let a = new Singleton();
let b = new Singleton();
console.log(a === b);
// -> true

예시 와 이해

class SingleCat {
    static instance;
  
    constructor(name) {
        if(!Singleton.instance) {
       		Singleton.instance = this;
        }
      return Singleton.instance;
    }
  
  speak() {
  	console.log(this.name,'meow')
  }
}

let kitty = new SingleCat('kitty');
let nabi = new SingleCat('nabi');

kitty.speak();  //kitty, meow
nabi.speak();   //kitty, meow
  1. 정적 변수 스태틱 인스턴스는 시작과 끝까지 유지되나 처음에는 아무것도 가르키고 있지 않다.(언디파인드 상태)
  2. 첫 객체가 만들어질 때 instance는 정의 되어있지 않은 상태기 때문에 instance 에 this를 정의하고 instance를 반환한다.
if(!Singleton.instance) {
    Singleton.instance = this; // 첫 객체에서만 조건문을 탐 .
  }  return Singleton.instance;
  1. 두번째 객체가 만들어질 때 이미 instance가 정의 되어 있기 때문에 곧바로 정의되어있던 인스턴스를 반환한다. 때문에 동일 클래스로 new 를 해도 인스턴스 하나만 존재한다. 이것이 싱글톤 패턴.

0개의 댓글