본문 바로가기
JavaScript 기초

[JavaScript] 싱글톤 패턴(Singleton Pattern)이란?

by 개미는뚠뚠딴 2020. 10. 19.
반응형

오늘은 JS에서 싱글톤 패턴을 사용하는 방법에 대해서 공부했다. 

 

싱글톤 패턴(Singletone Pattern)이란 객체 생성 패턴 중 하나로 전체 프로그램 내에서 하나의 인스턴스만 존재할 수 있도록 하는 것이다.

 

// singletonEx 라는 객체안에 키, 벨류 값을 넣어준다.
let singletonEx = {
  count: 0,
  increase: function() {
    this.count++ // 메소드 호출을 할 경우, this는 singletonEx를 가리킨다.
  },
  decrease: function() {
    this.count--
  },
  getValue: function() {
    return this.count
  }
}

singletonEx.increase()
singletonEx.increase()
singletonEx.decrease()
singletonEx.getValue() // 1

 

이렇게 하면 외부에서는 count에 접근이 불가능하지만 singletonEx 객체의 내장 함수로 간접 접근이 가능하다.

 

그러나 count 변수가 비공개 변수가 아니므로 private 하게 바꿔보면 

 

 

let singletonEx = (function(){
  let instance; // 비공개 변수
  function init(){
    // singleton instanse
    return {
      // 공개 프로퍼티
      count : 0,
      
      // 공개 메서드
      increase: function() {
        this.count++
  	  },
  	 decrease: function() {
        this.count--
  	  },
  	getValue: function() {
      return this.count
  	 }
    };
  }
  
  return {
        getInstance: function() {
            // instance 가 없는 경우 새로 선언
            if (!instance) {
                instance = init()
            }
            // instance 가 이미 있는 경우 해당 instance 반환
            return instance
        }
    }
})()

let singletonEx1 = singletonEx.getInstance()
singletonEx1.increase() // 증가 1
singletonEx1.increase() // 증가 1

console.log(singletonEx1.getValue()) // 2
console.log(singletonEx1.count) // 2

let singletonEx2 = singletonEx.getInstance()
console.log(singletonEx2.count) // 2

singletonEx2.decrease(); // 감소 1

console.log(singletonEx1.getValue()) // 1
console.log(singletonEx1 === singletonEx2); // true


 

 

내장 함수 반환을 이용해 싱글톤 패턴을 구현할 수 있으며 프로그램 내에서 하나의 인스턴스만 존재해야 할 때 해당 패턴을 유용하게 쓸 수 있다.

 

반응형

댓글