출처
https://yceffort.kr/2021/01/nodejs-4-design-pattern#%ED%94%84%EB%A1%9C%ED%86%A0%ED%83%80%EC%9E%85
https://evan-moon.github.io/2019/10/23/js-prototype/
프로토타입이란?
프로토타입은 일종의 디자인 패턴 중 하나이다.
자바스크립트 뿐만 아니라 ActionScript, Lua, Perl 등 프로토타입 기반 프로그래밍을 지원하는 다른 언어도 많다.
객체를 효율적으로 생성하는 방법을 다루는 패턴이다.
주로 객체를 생성하는 비용이 클 때 이를 회피하기 위해 사용된다.
객체를 생성할 때 원본이 되는 객체를 복사해서 생성하는 패턴이다.
자바스크립트에서 프로토타입이란?
const evan = {
name: 'Evan',
age: 29,
say: function () {
console.log(`Hi, I am ${this.name}!`);
}
};
자바스크립트는 애초에 객체를 생성할 때 프로토타입을 사용하기 때문에 객체를 생성하기만해도 프로토타입 패턴이 적용된다.ES5까지의 자바스크립트에서는 클래스 개념이 없기 때문에 함수를 이용하여 객체를 생성한다.
* 생성자(Constructor)를 사용하여 객체를 생성
자바 등에서는 Object가 클래스이지만 자바스크립트에서는 함수이다.
const evan = new Object({
name: 'Evan',
age: 29,
});
* 함수를 생성할 때 프로토타입 객체가 생성되고 생성된 프로토타입 객체의 생성자와 원래 함수가 연결된다.
function User() {};
console.log(typeof User);
console.log(typeof User.prototype)
console.log(User.prototype.constructor === User);
* new 키워드를 사용하여 새로운 객체를 만들게 되면 evan() 함수 자체가 아니라 evan() 함수가 생성될 때 함께 생성된 evan() 함수의 프로토타입 객체를 복제해서 새로운 객체를 만든다.
이때 생성된 객체가 자신의 원본 객체에 접근할 수 있는 프로퍼티가 바로 __proto__ 프로퍼티이다.
const evan = new User();
console.log(evan.__proto__.constructor === User); // true
console.log(evan.__proto__.constructor === evan); // false
console.log(evan.__proto__ === User.prototype); // true
'개발 > Javascript(Typescript)' 카테고리의 다른 글
| [postgresql] express 서버에서 데이터 insert 하기 (0) | 2023.08.30 |
|---|---|
| [자바스크립트] 이벤트루프 (0) | 2023.08.17 |
| [디자인 패턴] 빌더 패턴 (1) | 2023.08.11 |
| [디자인 패턴] 팩토리 패턴 (0) | 2023.08.09 |
| [디자인 패턴] 싱글톤 (0) | 2023.08.08 |