[JS ES6] 객체지향3. prototype의 특징

gminnimk·2025년 3월 20일

JS ES6

목록 보기
14/31

1️⃣ Constructor 함수와 prototype

  • 생성 시점:
    • prototype은 오직 constructor 함수가 만들어질 때 자동으로 생성됩니다.
    • 일반 objectarray에는 기본적으로 prototype이 없습니다.
  • 상속을 원할 때:
    • 일반 객체에 상속 기능을 부여하고 싶다면,
      • constructor 함수를 사용하거나,
      • 다음 시간에 다룰 Object.create() 혹은
      • class 문법을 사용해야 합니다.

2️⃣ proto 속성과 부모 객체

  • 부모 객체(프로토타입) 확인:
    • 생성된 객체들은 내장 속성인 __proto__를 가지고 있습니다.
    • __proto__는 해당 객체의 부모, 즉 constructor의 prototype을 가리킵니다.
  • 예제 코드:
    function 기계() {
      this.name = 'Kim';
      this.age = 15;
    }
    var 학생1 = new 기계();
    
    console.log(학생1.__proto__); // 학생1의 부모 prototype 출력
    console.log(기계.prototype);  // 기계 함수의 prototype 출력
    
    • 위 두 출력 결과는 동일하며, 이는 __proto__가 부모의 prototype을 의미함을 보여줍니다.
    • 비유:
      • __proto__는 마치 "부모 유전자"처럼 자신의 부모가 누구인지 알려주는 역할을 합니다.

3️⃣ proto를 이용한 상속 구현

  • 직접 등록:
    • 임의의 객체에 __proto__를 직접 할당하면, 해당 객체는 새로운 부모 객체(프로토타입)를 갖게 됩니다.
  • 예제 코드:
    var 부모 = { name: 'Kim' };
    var 자식 = {};
    
    // 자식의 부모를 직접 지정
    자식.__proto__ = 부모;
    
    console.log(자식.name); // 출력: 'Kim'
    
    • 설명:
      • 부모 객체를 자식.__proto__에 할당함으로써, 자식 객체는 부모 객체의 속성(예, name)에 접근할 수 있게 됩니다.
      • 이처럼 상속 기능을 직접 구현할 수 있습니다.

4️⃣ 콘솔창에 출력되는 prototype 정보

  • 콘솔 출력 확인:
    • 함수로 생성된 객체를 콘솔에 출력하면, 해당 객체의 속성뿐 아니라 __proto__ 정보도 같이 확인할 수 있습니다.

  • 예제 코드:
    function 기계() {
      this.name = 'Kim';
      this.age = 15;
    }
    // prototype에 속성 추가
    기계.prototype.gender = '남';
    
    var 학생1 = new 기계();
    console.log(학생1);
    
    • 결과:
      • 콘솔에는 name, age 등의 인스턴스 속성뿐 아니라, __proto__를 통해 연결된 기계.prototype의 내용도 확인할 수 있습니다.
    • 탐색:
      • 기계.prototype.__proto__를 조회하면, 이는 Object.prototype을 가리킵니다.
      • 모든 객체는 이러한 상속 계층 구조를 가지며, 최종적으로 모든 객체의 조상은 Object.prototype입니다.
      • 배열(Array)과 함수(Function)도 결국 Object의 하위 타입임을 알 수 있습니다.

📌 정리

  • prototype은 constructor 함수에서만 자동 생성됩니다. 일반 객체나 배열에는 기본적으로 존재하지 않으므로 상속이 필요하면 constructor, Object.create(), 혹은 class를 사용해야 합니다.
  • proto는 객체의 부모(프로토타입)를 나타냅니다.
    • 객체가 생성되면 자동으로 할당되며, 이를 통해 부모의 속성에 접근할 수 있습니다.
    • 직접 __proto__를 설정하여 객체 간 상속 관계를 만들 수 있습니다.
  • 콘솔 출력에서 확인할 수 있는 prototype 정보:
    • 생성된 객체의 __proto__를 통해 상속 계층(부모, 부모의 부모 등)을 확인할 수 있으며, 모든 객체의 최상위 조상은 Object.prototype입니다.

0개의 댓글