2019.07.25 TIL

Instantiation Patterns (인스턴스화 패턴)

Thu, 25 Jul 2019

Instantiation Patterns

  • class(constructor가 나오기전 인스턴스화 패턴)

  • 인스턴스화 패턴이란? 인스턴스화 패턴은 JavaScript로 무언가를 만드는 방법. JavaScript는 객체를 만드는 네가지 방법을 제공

  • 인스턴스화 패턴의 기능 객체 생성 객체의 메소드와 프로퍼티 생성

Functional

  • 함수를 이용하여 생성하는 방법 함수를 이용하여 빈 객체를 만들고 속성과 메소드를 추가, 그 다음 객체를 반환 함수가 호출 될 때마다 메소드에 접근 가능
var Animal = function(species, name) {
  var obj = {};

  obj.species = species;

  obj.name = name;

  obj.makeSound = function() {};

  obj.eat = function() {};

  obj.sleep = function() {};

  return obj;
};

var tigher = Animal("tigher", "tigger");
tiger.eat();
tiger.makeSound();
  • 장점 : 코드 읽기가 쉬움(모든 함수가 객체에 포함 되어 있음), 프로퍼티는 클로저 내에 포함 되므로 숨겨짐

  • 단점 : 모든 메소드가 함수내에 포함되므로, 두번째 인스턴스를 생성하면 모든 프로퍼티와 메소드가 복사 됨, 새 객체를 만든 다음 메서드를 변경하고 새 인스턴스를 만들면 두 객체가 서로 다른 메서드를 참조함

Functional Shered

  • Functional Shered는 모든 객체간에 메소드를 공유함으로 새로운 객체를 만들때마다 메모리에 메소드를 복사하지 않아도 됨(메소드를 참조함)
  • Functional과 마찬가지로 내부에 빈 객체가 있는 함수로 시작하여 함수 내에서 프로퍼티를 정의, 메소드는 다른 객체에 정의함(extend)
var Animal = function(species, name) {
  var obj = {};
  obj.species = species;
  obj.name = name;

  extend(obj, objMethods);
  return obj;
};

var extend = function(obj, methods) {
  for (var key in methods) {
    obj[key] = methods[key];
  }
};

var objMethods = {
  makeSound: function() {},
  eat: function() {},
  sleep: function() {}
};

var tiger = Animal("tiger", "tigger");
tiger.eat();
tiger.makeSound();
  • 장점 : 메서드 복제가 없어지므로 메모리 효율 향상

  • 단점 : 메서드를 수정하면 기존 객체와 새로운 객체가 다른 메서드를 참조

Prototypal

  • Prototypal 인스턴스화는 프로토 타입 체인을 사용하여 객체를 생성
  • 메서드는 Object.create 메서드를 사용하여 객체의 프로터 타입에 첨부 됨
  • 함수 내부에 프로퍼티 정의 가능
var Animal = function(species, name) {
  var obj = Object.create(objMethods);
  obj.species = species;
  obj.name = name;
  return obj;
};

var objMethods = {
  makeSound: function() {},
  eat: function() {},
  sleep: function() {}
};

var tiger = Animal("tiger", "tigger");
tiger.eat();
tiger.makeSound();
  • 장점 : 메서드는 객체 내에서 반환되는 대신 객체의 프로토 타입에 연결 됨, 모든 메서드는 메모리에 메서드를 복제하지 않고 객체에서 사용가능

  • 단점 : 메서드를 사용하려면 객체를 만들고 생성자 함수에서 객체를 반환해야함

Pesudoclassical

  • Pseudoclassical 인스턴스 생성은 프로토타입 체인을 사용
  • new키워드를 사용하여 프로토타입 인스턴스화로 작성하는 대부분의 기능 제공
  • 새로운 변수를 생성하고 Object.create()를 할당하는 대신, Pseudoclassical 인스턴스 생성은 ‘this’에 할당
  • 새 함수를 만들고 ‘this’키워드를 사용하여 프로퍼티 생성
  • 새로운 객체를 만드려면 new키워드 사용
var Animal = function(species, name) {
  this.species = species;
  this.name = name;
};

Animal.prototype.makeSound = function() {};
Animal.prototype.eat = function() {};
Animal.prototype.sleep = function() {};

var tiger = new Animal("tiger", "tigger");
tiger.eat();
tiger.makeSound();
  • 장점 : 객체 생성에 최적화

  • 단점 : 읽기 어려움

인스턴스화 패턴 참고

Loading...
Upati Sariputa

Upati Sariputa

  • React.js, Node.js, Django
  • 아직 블로그가 완벽하지 않습니다.