# [10.18]JavaScript Design pattern(모듈, 싱글톤, 생성자)

- Author: @kimyoungjo
- Published: 2019-10-18
- Updated: 2019-10-31
- Source: http://blex.me/@kimyoungjo/1018javascript-design-pattern%EB%AA%A8%EB%93%88-%EC%8B%B1%EA%B8%80%ED%86%A4-%EC%83%9D%EC%84%B1%EC%9E%90
- Tags: 자바스크립트, til, javascript

---

###모듈 패턴
```javascript
	var newScope = (function () {
		구문
	}) ();
```
함수를 선언하자마자 실행시키는 패턴. IIFE라고도 함.

###싱글턴 패턴
```javascript
	var singleton = (function() {
	  var instance;
  	var a = 'hello';
  function initiate() {
    return {
      a: a,
      b: function() {
        alert(a);
      }
    };
  }
  return {
    getInstance: function() {
      if (!instance) {
        instance = initiate();
      }
      return instance;
    }
  }
})();
var first = singleton.getInstance();
var second = singleton.getInstance();
console.log(first === second); // true;
```
단 하나의 객체를 만들 때 이용한다. 비공개 변수를 이용하는게 핵심이다. 모듈 패턴을 이용하여 instance와 같은 비공개 변수를 만들어주고 initate라는 실질적 함수부분을 만들어준다.

사용예로는 게임을 만들때 게임객체를 싱글톤으로 만드는 것이다. 게임은 실행했을때 한 번만 실행되어야 하기 때문.

###생성자 패턴
```javascript
	var Vehicle = (function() {
  function Vehicle(name, speed) {
    this.name = name; this.speed = speed;
  }
  Vehicle.prototype.drive = function () {
    console.log(this.name + ' runs at ' + this.speed);
  };
  return Vehicle;
})();
```
모듈패턴이 사용되어 Vehicle끼리의 충돌이 피해진다. 변수 Vehicle에 생성자 Vehicle이 덮어짐.
