[자바스크립트] 프로토타입

Kate·2023년 4월 3일
0

자바스크립트

목록 보기
13/19
post-thumbnail

자바스크립트란

  • 명령형, 함수형, 프로토타입 기반 객체지향 프로그래밍을 지원하는 멀티 패러다임 프로그래밍 언어
  • 자바스크립트를 이루고 있는 거의 모든 것이 객체 (원시 타입 값 제외 나머지 값)

객체지향 프로그래밍

객체지향 프로그래밍

  • 명령어 또는 함수의 목록으로 보는 전통적인 명령형 프로그래밍의 절차지향적 관점에서 벗어나 여러 개의 독립적 단위, 즉 객체의 집합으로 프로그램을 표현하려는 프로그래밍 패러다임
  • 객체의 상태를 나타내는 데이터와 상태 데이터를 조작할 수 있는 동작을 하나의 논리적인 단위로 묶어은 복합적인 자료구조

상속과 프로토타입

  • 상속 : 객체지향 프로그래밍의 핵심 개념으로 어떤 객체의 프로퍼티 또는 메서드를 다른 객체가 상속받아 그대로 사용할 수 있는 것
  • 자바스크립트는 프로토타입을 기반으로 상속을 구현함
  • 코드의 재사용이란 관점에서 유용 : 생성자 함수가 생성할 모든 인스턴스는 별도의 구현없이 상위 객체인 프로토타입의 자산 공유 가능

프로토타입 객체

  • 객체지향 프로그래밍의 근간을 이루는 객체 간 상속을 구현하기 위해 사용
  • 프로토타입은 어떤 객체의 상위 객체의 역할을 하는 객체로서 다른 객체에 공유 프로퍼티(메서드 포함)을 제공함
  • __proto__ 접근자 프로퍼티: 모든 객체는 __proto__ 접근자 프로퍼티를 통해 자신의 프로토타입, [[prototype]] 네부 슬롯에 간접적으로 접근할 수 있다.
  • 함수 객체의 prototype 프로퍼티 : 함수 객체만이 소유하는 prototype 프로퍼티는 생성자 함수가 생성할 인스턴스의 프로토타입을 가리킴
  • 프로토타입의 constructor 프로퍼티와 생성자 함수
    - constructor 프로퍼티 : prototype 프로퍼티로 자신을 참조하고 있는 생성자 함수

리터럴 표기법

  • 명시적으로 new 연산자와 함께 생성자 함수를 호출하여 인스턴스를 생성하지 않는 객체 생성 방식

프로토타입 생성 시점

  • 프로토타입은 생성자 함수가 생성되는 시점에 더불어 생성됨
  • 사용자 정의 생성자 함수 : 생성자 힘수로서 호출되어있는 constructor는 함수 정의가 평가 되어 함수 객체를 생성하는 시점에 프로토타입도 더불어 생성됨
  • 빌트인 생성자 함수 : Object, String, Number, Array 등과 같은 빌트인 생성자 함수도 함수가 생성되는 시점에 프로토타입이 생성됨

객체 생성 방식과 프로토타입 결정

추상연산 OrdinaryObjectCreate에 의해 생성

  • 객체 리터럴
  • Object 생성자 함수
  • 생성자 함수
  • Object.create. 메서드
  • 클래스(ES6)

프로토타입 체인

  • 프로토타입 체인 : 객체의 프로퍼티에 접근하려고 할 때 해당 객체에 접근하려는 프로퍼티가 없다면 [[Prototype]] 내부 슬롯의 참조를 따라 자신의 부모 역할을 하는 프로토타입의 프로터피를 순차적으로 검색
  • 자바스크립트가 객체 지향 프로그래밍의 상속과 프로퍼티 컴색을 구현하는 매커니즘
  • Object.prototype을 프로토타입 체인의 종점이라고 함(프로토타입 체인 최상위에 위치하는 객체)
  • 스코프체인 : 식별자 검색을 위한 메커니즘

오버라이딩과 프로퍼티 섀도잉

  • 오버라이딩 : 상위 클래스가 가지고 있는 메서드를 하위 클래스가 재정의하여 사용하는 방식
    -프로퍼티 섀도잉 : 상속 관계에 의해 프로퍼티가 가려지는 현상

프로토타입 교체

  • 프로토타입은 생성자 함수 또는 인스턴스에 의해 교체될 수 있음

instanceof 연산자

객체 instanceof 생성자 함수
  • 우변의 생성자 함수의 prototype에 바인딩된 객체가 좌변의 객체의 프로토타입 체인 상에 존재하면 true, 그렇지 않을 경우 false로 평가
  • 이항 연산자로서 좌변에 객체를 가리키는 식별자, 우변에 생성자 함수를 가리키는 식별자를 피연산자로 받음
profile
개발 공부하는 케이트입니다.

0개의 댓글