객체지향_3)상속과 prototype

양갱장군·2020년 8월 29일
0
post-thumbnail

상속이란?


상속은 객체의 로직을 그대로 물려 받는 또 다른 객체를 만들 수 있는 기능을 의미한다. 단순히 물려받는 것 뿐 아니라 기존의 로직을 수정하고 변경해서 파생된 새로운 객체를 만들 수도 있다.

상속 개념을 이해하기 위해선 prototype의 원리를 이해하는 것이 중요하다. 프로토타입은 크게 두 가지로 해석되는데, 프로토타입 객체를 참조하는 prototype 속성과 객체 멤버인 proto 속성이 참조하는 숨은 링크가 있다.

function Person(){}
var joon = new Person();  
var jisoo = new Person();
Person.prototype.getType = function (){  
    return "인간"; 
};
console.log(joon.getType());   // 인간  
console.log(jisoo.getType());  // 인간 
jisoo.age = 25;
console.log(joon.age);   // undefined  
console.log(jisoo.age);  // 25  

위 예문을 도식화 하자면 아래와 같다.

  • JavaScript에서는 함수 멤버로 prototype 속성이 존재. 이 속성은 다른 곳에 생성된 함수이름의 프로토타입 객체를 참조. 프로토타입 객체의 멤버인 constructor 속성은 함수를 참조

  • Person 함수의 prototype 속성이 참조하는 프로토타입 객체는 new라는 연산자와 Person 함수를 통해 생성된 모든 객체의 원형이 되는 객체, 그렇기 때문에 생성된 모든 객체가 참조

  • JavaScript에서는 기본 데이터 타입인 boolean, number, string, 그리고 특별한 값인 null, undefined 빼고는 모두 객체. 사용자가 정의한 함수도 객체이고, new라는 연산자를 통해 생성된 것도 객체. 객체 안에는 proto(비표준) 속성이 있으며, 이 속성은 객체가 만들어지기 위해 사용된 원형인 프로토타입 객체를 숨은 링크로 참조

  • 프로토타입 객체에 멤버를 추가, 수정, 삭제할 때는 함수 안의 prototype 속성을 사용해야 함. 생성된 객체를 이용하여 프로토타입 객체의 멤버를 수정하면 프로토타입 객체에 있는 멤버를 수정하는 것이 아니라 자신의 객체에 멤버를 추가하는 것일 뿐.
    예를 들어, 아래와 같은 코드를 추가하더라도 프로토타입 객체의 멤버는 수정되지 않음.

    joon.getType = function (){  
        return "사람"; 
  • JavaScript에서 기본 데이터 타입을 제외한 모든 것이 객체. 객체가 만들어지기 위해서는 자신을 만드는 데 사용된 원형인 프로토타입 객체를 이용하여 객체를 만드는데, 이때 만들어진 객체 안에 __proto__ 속성이 자신을 만들어낸 원형을 의미하는 프로토타입 객체를 참조하는 숨겨진 링크가 있습니다. 이 숨겨진 링크를 프로토타입이라 정의.

(참고: http://www.nextree.co.kr/p7323/)

0개의 댓글