티스토리 뷰

Javascript

:싱글톤 패턴 (singletone pattern)


"자바스크립트 핵심 가이드 라는 책을 읽던중, 모듈 부분에 대해서 학습중에 모듈 패턴을 사용하면, 전역변수 사용을 없앨 수 있고, 이 패턴을 사용하면, 정보은닉과 그 외 다른 좋은 설계 방식을 따를 수 있게 하고, 애플리케이션이나 다른 싱글톤 패턴들을 효과적으로 캡슐화 할 수 있게 한다" 는 부분이 나왔습니다. 싱글톤 패턴에 대해서는 어렴풋이 알고 있어, 이 기회에 제대로 알아보기 위해 학습을 해보았습니다.


| 싱글톤이란?


  • 싱글톤 패턴은 전체 시스템에서의 하나의 인스턴스만 존재하도록 보장하는 객체 생성패턴이라고 합니다.따라서, 객체 리터럴도 모두 싱글톤 패턴이라고 할 수 있다고 합니다.
  • 또한 싱글톤은 특정 클래스의 인스턴스를 오직 하나만 유지하고, 동일한 클래스로 새로운 객체를 생성해도 처음 만들어진 객체를 얻게 됩니다. 
  • 싱글톤 패턴은 객체지향 언어에서 여러개의 인스턴스 생성을 피하는 유용한 패턴입니다. 그러나 클래스 기반의 언어라고 말할 수 없는 자바스크립트에서는 이패턴이 그렇게 유용한 편은 아니라고 합니다.
  • 또한 js에서의 객체 리터럴이 싱글턴 패턴의 대표적인 예입니다. 하지만 모든 속성이 다 공개 되어있기 때문에, 비공개로 만드는 것이 제대로 된 싱글턴이라고 합니다.
    1. 객체 리터럴만으로는 비공개 상태나 함수를 정의 할 수 없습니다. 따라서 외부에서 접근을 할 수 없도록 비공개 멤버를 정의해야 한다고 하는데요, 여기서 당연히 필요한 개념은 클로저입니다.

    2. 즉, 싱글톤 객체를 생성하기 위해선 객체 리터럴 + 클로저의 조합이 필요하다고 합니다.


싱글톤 예제


아래에서 볼수 있듯이, IIFE로 비공개 멤버 변수를 만들었고, init 함수 안에 있는 객체가 실제 객체의 모습을 띄게 됩니다. 여기서는 a 가 비공개 변수가 되었습니다.


getInstance 함수를 호출할때, 인스턴스의 유무를 판단하고 없을시에는 init함수를 호출하여, 객체를 생성하고 있을시에는 기존 instance를 return 하게 됩니다.


즉,  하나의 인스턴스만 존재하는 싱글톤 패턴을 유지하게 되는것입니다.


var singleton = (function() {
 var instance;
 var a = 'singleton';
 function init() {
   return {
     a: a,
     b: function() {
       console.log(a);
    }
  };
}
 return {
   getInstance: function() {
     if (!instance) {
       instance = init();
    }
     return instance;
  }
}
})();
var singletone1 = singleton.getInstance();
var singletone2 = singleton.getInstance();
console.log(singletone1 === singletone2); // true;

위에서 알수 있듯이, 싱글톤 패턴은 또한 모듈 패턴을 활용한 패턴입니다.


따라서, 앞서 말했던 "자바스크립트 핵심 가이드 라는 책을 읽던중, 모듈 부분에 대해서 학습중에 모듈 패턴을 사용하면, 전역변수 사용을 없앨 수 있고, 이 패턴을 사용하면, 정보은닉과 그 외 다른 좋은 설계 방식을 따를 수 있게 하고, 애플리케이션이나 다른 싱글톤 패턴들을 효과적으로 캡슐화 할 수 있게 한다" 라는 부분이 이제 이해가 갈 것입니다.




| 참조한 사이트


  • https://www.zerocho.com/category/JavaScript/post/57541bef7dfff917002c4e86
  • http://webclub.tistory.com/150
  • https://wonism.github.io/js-pattern-1/


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
TAG
more
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함