0. Prototype

가. prototype과 객체지향 프로그래밍


  1. 자바스크립트는 프로토타입 기반의 객체지향 프로그래밍 언어이다.
  2. vs 명령형 프로그래밍(명령어 또는 함수의 목록으로 보는 방식 - 절차지향적 관점)에서 벗어난 패러다임
  3. 독립적인 객체의 집합으로 프로그램을 표현하려는 프로그래밍 패러다임
  4. 실체를 인식하는 철학적 사고를 프로그래밍에 접목하려는 시도에서 시작한다.
  5. 추상화: 다양한 속성 중에서 프로그램에 필요한 속성만을 간추려 내어 표현하는 것.
  6. 객체지향 프로그래밍: 상태 데이터 + 상태 를 조작할 수 있는 동작
const circle = {
  radius: 5,
  getDiameter() {
    return 2 * Math.PI * this.radius;
  }
} 

나. 상속과 프로토타입


  1. 상속: 어떤 객체의 포로퍼티 또는 메서드를 다른 객체가 상속받아 그대로 사용할 수 있는 것 -프로토타입을 기반으로 구현.

  2. 프로토타입(내 생각): 자바스크립트에서 상속을 구현하기 위해 생성자 함수의 프로토타입 프로퍼티에 바인딩 되어있는 객체??

  3. 생성자 함수가 생성한 모든 인스턴스는 상위 객체의 prototype의 모든 프로퍼티와 메서드를 상속받는다.

  4. 메서드 중복 생성 방지 - 메모리 낭비 방지 & 재사용성

    function Circle(radius) {
      this.radius = radius;
    }
    
    Circle.prototype.getArea = function () {
      return Math.PI * this.radius ** 2;
    }
    
    const circle1 = new Circle(1);
    const circle2 = new Circle(2);
    
    console.log(circle1.getArea === circle2.getArea); //true
    

다. __ proto__ 접근자 프로퍼티