객체 생성 패턴 3가지

  • 리터럴(literal) 방식

  • 함수 방식

  • 프로토 타입

리터럴(literal) 방식

var 인스턴스 = {
    프로퍼티1: 초깃값,
    프로퍼티2: 초깃값,

    메서드1: function(){

    },
    메서드2: function(){

    }
}

리터럴 방식에는 생성자가 존재하지 않는다. 객체를 정의함과 동시에 자동으로 인스턴스가 만들어진다. 인스턴스를 하나 이상 만들 수 없는 단점을 가진다. 붕어빵 들이 있어도 두 개 이상 붕어빵을 만들 수 없다.. :fish:

재사용하기 위한 용도보다는 여러 개의 데이터를 묶어 값을 보관하거나 함수의 매개변수 값으로 전달할 때 주로 사용한다.

함수 방식

function 클래스이름(){
    this.프로퍼티1 = 초깃값;
    this.프로퍼티2 = 초깃값;

    this.메서드 = function(){

    },
    this.메서드 = function(){

    }
}

var 인스턴스 = new 클래스 이름();

프로퍼티와 메서드는 반드시 자기 자신을 나타내는 this에 정의해야 한다. 생성자를 이용해 인스턴스를 만든다.

치명적인 단점이 있는데 인스턴스마다 내부의 모든 메서드가 독립적으로 만들어진다.

인스턴스가 여러개이고 그 메서드마다 독립적으로 만들어진다면 많은 코스트를 지불해야한다.

프로토타입 방식

function 클래스이름(){
    this.프로퍼티1 = 초깃값;
    this.프로퍼티2 = 초깃값;
}
클래스이름.prototype.메서드 = function(){};
클래스이름.prototype.메서드 = function(){};

var 인스턴스 = new 클래스 이름();

인스턴스끼리 메서드를 공유하는 구조다 인스턴스가 생성되기 전에 이미 prototype에 메서드가 만들어져 있다.

Last updated

Was this helpful?