Javascript

[Javascript] 프로토타입 체인

2023. 3. 16. 11:47
목차
  1. 1. 프로토타입 체인
  2. 2. 프로토타입, prototype 슬롯, prototype 프로퍼티, __proto__ 프로퍼티

 

지난 포스팅에서 이어집니다.

 

 

[Javascript] 클래스와 객체지향 프로그래밍

1. 객체 공장 만들기 청소부들의 정보가 담겨 있는 객체를 만들어 데이터를 관리한다고 생각해 보자. 두 명의 청소부가 있을 때 다음과 같이 객체를 만들 수 있을 것이다. let cleaner1 = { name: 'Jin', d

sulki.tistory.com

 

지난 포스팅에서 다음과 같이 클래스 Cleaner와 그 클래스를 상속받는 서브클래스 CleanerPlus를 생성했다.

 

class Cleaner {
  constructor(name, department) {
    this.name = name;
    this.department = department;
  }
  clean() {
    return `${this.name} has cleaned the ${this.department}.`;
  }
}


class CleanerPlus extends Cleaner {
  constructor(name, department, pet) {
    super(name, department);
    this.pet = pet;
  }
  petSitting() {
    return `${this.name} can take care of ${this.pet}.`;
  }
}

let cleaner3 = new CleanerPlus("Yoon", "bathroom", "cats");
console.log(cleaner3.clean()); //Yoon has cleaned the bathroom.
console.log(cleaner3.petSitting()); //Yoon can take care of cats.

 

1. 프로토타입 체인

 

위에서 생성한 인스턴스 cleaner3은 서브클래스를 통해 만들어진 인스턴스지만

서브클래스가 슈퍼클래스의 프로토타입을 상속받기 때문에 슈퍼클래스 Cleaner가 가지고 있는 기능을 모두 수행할 수 있다.

 

cleaner3.clean();을 실행하면 먼저 cleaner3이 가지고 있는 메서드를 확인한 뒤

clean 메서드를 찾지 못하고 prototype 슬롯을 타고 올라가 CleanerPlus의 프로토타입이 가진 메서드를 확인한다.

이때도 clean 메서드는 발견되지 않을 것이기 때문에 또 다시 prototype 슬롯을 타고 올라가 탐색하게 되고

Clenaer 프로토타입에서 clean 메서드를 발견하고 이것을 실행한다.

 

이것을 그림으로 나타내면 다음과 같다.

 

 

2. 프로토타입, prototype 슬롯, prototype 프로퍼티, __proto__ 프로퍼티

 

프로토타입 공부를 하다 보면 가장 헷갈리는 것이 용어다.

용어가 다 비슷비슷해서 구별하기 어려워 정리를 해 보았다.

 

프로토타입

프로토타입 객체 자체를 의미한다.

모든 객체는 하나의 프로토타입을 갖는다.

 

prototype 프로퍼티

생성자 함수가 생성할 인스턴스의 프로토타입을 가리키는 프로퍼티다.

생성자 함수뿐 아니라 모든 함수에 prototype 프로퍼티가 들어 있다.

그러나 prototype 프로퍼티는 상속을 구현하기 위해서 필요한 것이기 때문에

객체를 생성하지 않는 일반 함수는 prototype 프로퍼티를 가진다 해도 별 의미는 없다.

 

prototype 슬롯

모든 객체가 기지고 있는 내부 슬롯. 이중 대괄호([[...]])로 감싼 형태로 표시된다.

내부 슬롯이라는 것은 프로퍼티와 달라 존재는 하지만 직접 접근할 수는 없게 되어 있다.

예컨대 cleaner3.[[prototype]] 이런 식으로 접근할 수 없다는 것이다.

예외적으로 prototype 슬롯은 __proto__라는 접근자 프로퍼티를 통해서 간접적으로 접근할 수 있다.

 

__proto__

prototype 슬롯에 접근하기 위한 접근자 프로퍼티.

이 프로퍼티는 객체의 직접 소유가 아니라 Object.prototype의 프로퍼티다.

인스턴스 cleaner3을 콘솔에 찍어 보면 다음과 같이 __proto__ 프로퍼티가 깊이 숨겨져 있는 것을 볼 수 있다.

 

'Javascript' 카테고리의 다른 글

[Javascript] HTTP 요청(Fetch vs Axios)  (3) 2023.05.04
[Javascript] 비동기 프로그래밍  (0) 2023.03.20
[Javascript] 클래스와 객체지향 프로그래밍  (0) 2023.03.15
[Javascript] 고차함수  (0) 2023.03.14
[Javascript] DOM  (0) 2023.03.07
  1. 1. 프로토타입 체인
  2. 2. 프로토타입, prototype 슬롯, prototype 프로퍼티, __proto__ 프로퍼티
'Javascript' 카테고리의 다른 글
  • [Javascript] HTTP 요청(Fetch vs Axios)
  • [Javascript] 비동기 프로그래밍
  • [Javascript] 클래스와 객체지향 프로그래밍
  • [Javascript] 고차함수
JeanneLee57
JeanneLee57
공부하고 기록을 남기는 개발자 Jeanne
JeanneLee57
코딩은 진리
JeanneLee57
전체
오늘
어제
  • 분류 전체보기 (117)
    • Javascript (15)
    • React (15)
    • Next.js (8)
      • Next.js 베타 문서 번역 (5)
    • 프로젝트 (34)
      • 미니 프로젝트 & 과제 (25)
      • SEB 44 pre-project (1)
      • SEB 44 main-project (8)
    • 알고리즘 (12)
    • 부트캠프 준비 (6)
    • 기술면접 (3)
    • CS (7)
    • 코드스테이츠 프론트엔드 부트캠프 (12)

블로그 메뉴

  • 홈
  • 태그

공지사항

인기 글

태그

  • 번역
  • 프론트엔드
  • HTML
  • 고차함수
  • RTK
  • 프리코드캠프
  • Next.js
  • useEffect
  • 부트캠프준비
  • CSS
  • react
  • 유데미
  • 알고리즘
  • JavaScript
  • 프로그래머스
  • 코드스테이츠
  • 회고
  • codestates
  • 구조분해할당
  • 부트캠프

최근 댓글

최근 글

hELLO · Designed By 정상우.
JeanneLee57
[Javascript] 프로토타입 체인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.