개발/JavaScript

[JavaScript] 코어 자바스크립트 - 7. 프로토타입

알파카털파카 2023. 6. 11. 15:00

1. 객체란 무엇인가요? 

(key) (value)으로 이루어진 프로퍼티(Property)들의 집합

 

2. 객체가 생성되는 과정에 대해서 설명해주세요.

생성자 함수로 객체를 생성할 수 있음

생성자 함수에 new 연산자를 붙여 호출하면, 새로운 인스턴스가 만들어짐

 

3. 프로토타입과 프로토의 차이에 대해서 설명해 주세요.

프로토타입은 생성자 함수의 특정 데이터 타입에서 사용할 수 있는 메소드가 담긴 객체

프로토[[prototype]]는 인스턴스에서 생성자 함수의 프로토타입에 접근할 수 있는 통로 역할 

 

4. 생성자 함수에 대해서 설명해 주세요.

new 연산자를 붙여서 호출할 경우 쉽게 새로운 객체를 만들 수 있는 방법 

유사한 객체를 여러 개 만들 수 있음 

첫 문자는 대문자로 쓰고, new 연산자를 붙여서 사용해야 함 

 

5. 프로토타입 체인에 대해서 설명해 주세요.

어떤 메소드를 호출할 때, 우선 자기 자신에서 검색하고 없을 경우 프로토([[prototype]])를 타고 상위 생성자 함수의 프로토타입에서 해당 메소드를 찾는 것

스코프 체인과 유사한 흐름 

 

6. Array는 Object 일까요?

배열은 객체이다

배열은 Array 생성자 함수의 인스턴스이며, Array는 자바스크립트 내장 객체이고 배열과 관련된 다양한 메소드와 속성을 제공

 

7. Array에서 Object가 참조되는 체이닝 과정을 설명해 주세요.

배열에서 메소드를 사용하는 경우 Array 생성자 함수의 프로토타입에서 메소드를 찾게 되는데,

프로토타입 자체가 객체이므로 프로토타입 체인의 최상단에는 Object가 존재하게 됨 

이를 통해 Array에서 Object를 참조할 수 있음

 

8. 프로토타입의 함수를 만든다고하면 어떻게 만드시겠어요?

생성자 함수의 프로토타입에 메소드를 추가

해당 생성자 함수로 생성된 모든 객체가 그 메소드를 공유하게됨 

 

9. 프로토타입도 객체지향을 지향하는 것처럼 보이는데요. 클래스기반과 프로토타입 기반은 어떤 차이가 있을까요?

자바스크립트는 프로토타입 기반 언어

프로토타입과 클래스 모두 객체지향을 구현하기 위한 도구

프로토타입은 프로토타입 체인을 통해 상위에서 정의된 메소드를 하위 객체에서 참조할 수 있음

클래스는 프로토타입을 기반으로 한 문법 설탕(쉽고 간편하게 사용할 수 있는 방법)이기 때문에 객체의 생성과 상속을 직관적으로 구현할 수 있음

 

10. 프로토타입에서 상속은 어떻게 이루어지는지 자세하게 설명해 주세요.

프로토타입에서 상속은 프로토타입 체인을 통해 구현됨

하위 객체(인스턴스)의 프로토가 가리키는 대상(생성자 함수의 프로토타입)이 연결하고자 하는 상위 생성자 함수의 인스턴스를 바라보게 하면 됨

이런 방식으로 프로토타입 체인을 이어나갈 수 있음 

 

11. 프로토타입과 클래스의 차이에 대해서 설명해 주세요.

프로토타입은 어떤 객체를 프로토타입(원형)으로 삼고, 그 객체를 참조함으로써 상속과 비슷한 효과를 얻음

이러한 방식으로 상위에서 정의된 메소드를 참조할 수 있음

클래스는 extends 키워드로 상속받아서 사용

private, public 등 접근제어자 사용 가능 

 

12. 네이티브 프로토타입이라고 하면 자바스크립트 최상단의 변하지 않는 프로토타입을 의미합니다. 네이티브 프로토타입의 변경을 허용해주는 경우가 있는데 어떤 경우일까요?

네이티브 프로토타입은 수정이 가능하지만, 전역으로 영향을 미치게 되기 때문에 기존 코드와 충돌이 날 수 있어서 변경이 지양됨

단 하나의 예외가 있는데, 폴리필을 생성할 때

폴리필은 최신 버전의 기능이 지원되지 않는 이전 브라우저에서 최신 버전의 기능을 사용할 때 필요한 코드 

폴리필을 구현하고 내장 프로토타입에 추가할 때만 네이티브 프로토타입을 변경할 것