도서 리뷰

[코어 자바스크립트] 06_프로토타입

선인장777 2023. 9. 24. 19:58
  학습 전 학습 후
프로토타입이란 무엇인가요? 객체가 생성되기 위한 원형입니다. 모든 자바스크립트 객체는 프로토타입을 가집니다.
객체의 프로토 타입은 'prototype' 속성으로 접근할 수 있습니다.
객체를 생성할때 프로토 타입을 기반으로 상속을 받습니다.
프로토타입 체이닝이란? 객체에 접근하는 방법입니다. 자바스크립트는 객체의 프로토타입 체인을 따라가며 속성과 메서드를 찾습니다.
객체 자체에 해당 속성 또는 메서드가 없는 경우, 프로토타입 체인을 따라 상위 프로토타입에서 해당 멤버를 찾을 때까지 검색합니다.
Object.create는 어떤 메소드인가요? 객체를 생성하는 메서드입니다  주어진 객체를 프로토타입으로 사용하는 새로운 객체를 생성합니다.
이 새로운 객체는 기존 객체의 프로토타입 체인을 따라갈 수 있으므로 상속 및 객체 구조를 쉽게 설정할 수 있습니다.
프로토타입과 클래스의 차이점은 무엇일까요? 프로토타입은 객체의 원형이고
클래스는 인스턴스를 만들기 위한 틀입니다.
  1. 문법적 차이:
    • 프로토타입: 프로토타입 기반의 언어에서 객체는 다른 객체를 기반으로 생성됩니다. 이때 프로토타입 객체를 활용하여 상속과 메서드 공유가 이루어집니다. 프로토타입 객체는 생성자 함수와 함께 사용됩니다.
    • 클래스: 클래스 기반 언어에서는 클래스가 객체를 정의하고 생성합니다. 클래스는 객체의 구조와 동작을 사전에 정의하며, 객체는 클래스를 인스턴스화하여 생성됩니다. 자바스크립트는 ECMAScript 6 (ES6) 이후부터 클래스를 지원하긴 하지만, 여전히 프로토타입 기반 언어로도 사용됩니다.
  2. 상속 방식:
    • 프로토타입: 프로토타입은 객체를 기반으로 다른 객체를 생성하며, 이를 통해 상속이 이루어집니다. 객체는 프로토타입 체인을 통해 메서드와 속성을 상속받습니다.
    • 클래스: 클래스는 상속 계층을 더 명시적으로 정의합니다. 부모 클래스에서 자식 클래스로 명시적으로 상속을 설정하며, 클래스는 부모 클래스의 속성과 메서드를 상속받습니다.
  3. 런타임 변경:
    • 프로토타입: 프로토타입 기반의 언어에서는 객체의 프로토타입을 동적으로 변경할 수 있습니다. 이로 인해 객체의 동작을 동적으로 조정할 수 있습니다.
    • 클래스: 클래스 기반 언어에서는 클래스 정의가 런타임에 변경되기 어렵습니다. 클래스는 정의된 후에 상대적으로 불변하며, 동적으로 클래스를 수정하기 어렵습니다.
  4. 인터페이스:
    • 프로토타입: 프로토타입 기반의 언어에서는 인터페이스를 명시적으로 정의하지 않습니다. 객체는 필요한 메서드를 동적으로 추가하거나 수정할 수 있습니다.
    • 클래스: 클래스 기반 언어에서는 클래스가 인터페이스를 정의하며, 클래스를 구현하는 객체는 해당 인터페이스를 준수해야 합니다.
  5. 사용 사례:
    • 프로토타입: 자바스크립트와 같은 프로토타입 기반 언어는 동적이고 유연한 프로그래밍에 적합합니다. 웹 개발과 같이 런타임 환경에서 변경이 많은 경우에 유용합니다.
    • 클래스: 정적이고 명시적인 구조를 필요로 하는 언어 및 더 엄격한 타입 시스템을 가진 언어에서 주로 사용됩니다.
프로토타입의 최상단에는 어떤 프로토타입이 존재할까요?    모든 객체가 상속하는 기본 프로토타입 객체로 Object.prototype이 존재합니다.
Object.prototype의 중요한 메서드와 속성은 constructor, hasOwnProperty, isPrototypeOf, toString, valueOf이 있습니다.
프로토타입 메소드와 정적 메소드는 어떤 차이가 있을까요?   프로토타입 메서드는 객체 인스턴스와 관련된 동작을 정의하고 호출하는데 사용되며, 정적메서드는 클래스 또는 생성자 함수와 관련된 동작을 정의하고 호출하는데 사용됩니다.
프로토타입으로 상속은 어떻게 구현할 수 있을까요? extend...
  1. 부모 객체(슈퍼클래스) 정의:
    • 먼저 상속을 구현할 부모 객체(슈퍼클래스)를 정의합니다. 이 객체는 상속하려는 기능과 속성을 포함해야 합니다.
  2. 자식 객체(서브클래스) 생성:
    • 자식 객체(서브클래스)를 생성하고, 부모 객체를 프로토타입으로 지정하여 상속을 설정합니다. 이를 위해 Object.create() 메서드를 사용합니다.
  3. 자식 객체에 추가 기능 및 속성 정의:
    • 자식 객체에서 부모 객체에서 상속한 기능 외에도 추가 기능이나 속성을 정의할 수 있습니다.
  4. 자식 객체 인스턴스 생성:
    • 자식 객체를 이용하여 실제 인스턴스를 생성합니다.