Javascript/core

static method, static property와 class에 관하여

student513 2020. 12. 20. 22:08

참조prototype, __proto__에 관하여

 

prototype, __proto__에 관하여

프로토타입 개념에 관한 도식이다. Constructor 생성자함수로 instance를 생성한 경우 Constructor의 프로퍼티인 prototype가 instance의 __proto__라는 프로퍼티에 전달이 된다. 그럼 prototype은 무엇일까? co..

student513.tistory.com

 

 

prototype, __proto__에 관하여

프로토타입 개념에 관한 도식이다. Constructor 생성자함수로 instance를 생성한 경우 Constructor의 프로퍼티인 prototype가 instance의 __proto__라는 프로퍼티에 전달이 된다. 그럼 prototype은 무엇일까? co..

student513.tistory.com

prototype chaining에 관하여

 

prototype에 관한 공부를 하며 어렴풋이 느꼈겠지만 생성자함수는 Class이고, 이로 인해 생성된 결과물은 instance이다.

class는 실체 없이 개념을 정의해주는 '틀'이고, instace는 class의 모양으로 실질적인 정보를 담고 실제 코드 상에서 동작을 수행한다.

 

prototype에 할당되어있지 않고 생성자함수에 직접 할당되어있는 property와 method를 static property, static method라고 한다.

생성자 함수를 new 연산자 없이 일급객체인 함수로서 호출할 때만 의미가 있다.

prototype 내에 정의된 method를 prototype method라고 한다.

 

instance와 prototype method는 생략가능한 __proto__로 연결되어있기 때문에 접근이 가능하지만

static property, static method는 접근할 방법이 없다.


다음과 같은 코드가 있다고 하자.

function Person(name, age) {
    this._name = name;
    this._age = age;
}
Person.getInformations = function(instance) {
    return {
        name: instance._name,
        age: instance._age
    };
}
Person.prototype.getName = function() {
    return this._name;
}
Person.prototype.getAge = function() {
    return this._age;
}

getName, getAge는 prototype method이지만

getInformations는 static method이다. 

console.log(gomu.getName()); // OK
console.log(gomu.getAge()); // OK

console.log(gomu.getInformations(gomu)); // ERROR
console.log(Person.getInformations(gomu)); // OK

getInformation은 static method이므로 instance인 gomu에서는 참조가 불가능하다.

Class인 Person에서 참조가 가능하다.

 

출처: Javascript 핵심 개념 알아보기 - JS Flow, 정재남 강사님, 코어자바스크립트