JavaScript๋ ํ๋กํ ํ์
(์ํ ๊ฐ์ฒด) ๊ธฐ๋ฐ ์ธ์ด
→ ๊ฐ์ฒด๋ฅผ ์์ํ๊ธฐ ์ํด ํ๋กํ ํ์
์ ์ด์ฉํ๋ค.
์์๋๋ ์์ฑ๊ณผ ๋ฉ์๋๋ค์ ๊ฐ ๊ฐ์ฒด๊ฐ ์๋๋ผ ๊ฐ์ฒด์ ์์ฑ์์ prototype์ด๋ผ๋ ์์ฑ์ ์ ์๋์ด ์๋ค.
ํ๋กํ ํ์ ์ฒด์ธ์์ ํ ๊ฐ์ฒด์ ๋ฉ์๋์ ์์ฑ๋ค์ด ๋ค๋ฅธ ๊ฐ์ฒด๋ก ๋ณต์ฌ๋๋ ๊ฒ์ด ์๋๊ณ , ์ฒด์ธ์ ํ๊ณ ์ฌ๋ผ๊ฐ๋ฉฐ ์ ๊ทผํ ๋ฟ์ด๋ค.
์์ ๋ฐ๋ ๋ฉค๋ฒ๋ค์ prototype ์์ฑ์ ์ ์๋์ด ์๋ค
Object.๋ก ์์ํ๋๊ฒ ์๋๋ผ, Object.prototype.๋ก ์์ํ๋ค.
prototype ์์ฑ๋ ํ๋์ ๊ฐ์ฒด์ด๋ฉฐ ํ๋กํ ํ์ ์ฒด์ธ์ ํตํด ์์ํ๊ณ ์ ํ๋ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ๋ด์๋๋ ๋ฒํท์ผ๋ก ์ฃผ๋ก ์ฌ์ฉ๋๋ ๊ฐ์ฒด์ด๋ค. ๊ทธ๋์ Object.is(), Object.keys()๋ฑ prototype ๋ฒํท์ ์ ์๋์ง ์์ ๋ฉค๋ฒ๋ค์ ์์๋์ง ์๋๋ค.
- ํ๋กํ ํ์ ๊ฐ์ฒด: __proto__ ์์ฑ์ผ๋ก ์ ๊ทผ ๊ฐ๋ฅํ ๋ด์ฅ ๊ฐ์ฒด
- ํ๋กํ ํ์ ์์ฑ: ์์์ํค๋ ค๋ ๋ฉค๋ฒ๋ค์ด ์ ์๋ ๊ฐ์ฒด // ํ๋กํ ํ์ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ค.
- __proto__ : ๊ฐ์ฒด๊ฐ ๋ง๋ค์ด์ง๊ธฐ ์ํด ์ฌ์ฉ๋ ์ํ์ธ ํ๋กํ ํ์ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ ๋งํฌ๋ฅผ ๊ฐ์ง๋ค.
๐๐๐๐๐
Object.prototype
prototype ์์ฑ์ Javascript์์ ๊ฐ์ฅ ํท๊ฐ๋ฆฌ๋ ๋ช ์นญ์ค ํ๋์ด๋ค.
๋ณดํต this๊ฐ ํ์ฌ ๊ฐ์ฒด์ ํ๋กํ ํ์ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํฌ ๊ฒ์ด๋ผ ์คํดํ์ง๋ง ๊ทธ๋ ์ง ์๋ค.(ํ๋กํ ํ์ ๊ฐ์ฒด๋ __proto__ ์์ฑ์ผ๋ก ์ ๊ทผ ๊ฐ๋ฅํ ๋ด์ฅ ๊ฐ์ฒด์ด๋ค!) ๊ทธ๋์ ๋์ ์ prototype ์์ฑ์ ์์ ์ํค๋ ค๋ ๋ฉค๋ฒ๋ค์ด ์ ์๋ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
์ ์ญ ๊ฐ์ฒด์ธ String, Date, Number, Array์ ํ๋กํ ํ์ ์ ์ ์๋ ๋ฉ์๋์ ์์ฑ๋ค์ ์ฒดํฌํด ๋ณด๋ฉด, ์ด ํ๋กํ ํ์ ๊ฐ์ฒด๋ค์๋ ์ด๋ฏธ ๋ง์ ์์ ๋ฉ์๋๊ฐ ์ ์๋์ด ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
var myString = 'This is my string.';
๊ทธ๋์ myString ์ธ์คํด์ค๊ฐ ์์ฑ๋๋ ์ฆ์ split(), indexOf(), replace()๋ฑ์ ๋ฌธ์์ด์ ์ํ ์ ์ฉํ ๋ฉ์๋๋ค์ ์ฌ์ฉํ ์ ์๋ ์ด์ ์ด๋ค.
๋ชจ๋ ์์ฑ์ ํจ์๋ constructor ์์ฑ์ ์ง๋ ๊ฐ์ฒด๋ฅผ ํ๋กํ ํ์ ๊ฐ์ฒด๋ก ๊ฐ์ง๊ณ ์๋ค. ์ด constructor ์์ฑ์ ์๋ณธ ์์ฑ์ ํจ์ ์์ ์ ๊ฐ๋ฆฌํค๊ณ ์๋ค.
constructor ์์ฑ์ ๊ดํธ๋ฅผ ๋ถ์ด๊ณ ์คํํ์ฌ(์ธ์๊ฐ ํ์ํ๋ฉด ์ ๋ฌํ๊ตฌ์) ์ ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ ํธ๋ฆญ์ด ์๋ค. ์ด์จ๋ ์์ฑ์๋ ํจ์์ ์ผ์ข ์ด๋ฏ๋ก ๊ดํธ๋ฅผ ๋ถ์ด๋ฉด ์คํํ ์ ์๋ค.
new ํค์๋๋ฅผ ํตํด ์คํํ๋ฉด ํจ์๋ฅผ ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ธฐ ์ํ ์์ฑ์๋ก ์ฌ์ฉํ ์ ์๋ค.
prototype์ ์ ๋ฉ์๋๋ฅผ ์ถ๊ฐํ๋ ์๊ฐ ๋์ผํ ์์ฑ์๋ก ์์ฑ๋ ๋ชจ๋ ๊ฐ์ฒด์์ ์ถ๊ฐ๋ ๋ฉ์๋๋ฅผ ๋ฐ๋ก ์ฌ์ฉํ ์ ์๋ค๋ ์ ์ด๋ค.
class Human {
constructor(name, age) {
this.name = name;
this.age = age;
}
sleep() {
console.log(`${this.name}์ ์ ์ ๋ค์์ต๋๋ค`);
}
}
let kimcoding = new Human('๊น์ฝ๋ฉ', 30);
// ์ค์ตํด๋ณด์ธ์
Human.prototype.constructor === Human; // true - Human ํด๋์ค์ ์์ฑ์ ํจ์๋ Human๋๊น
Human.prototype === kimcoding.__proto__; // true - Human ํด๋์ค์ ํ๋กํ ํ์
์ Human ํด๋์ค์ ์ธ์คํด์ค์ธ kimcoding์ __proto__์ด๋๊น
Human.prototype.sleep === kimcoding.sleep; // true - Human ํด๋์ค์ sleep ๋ฉ์๋๋ ํ๋กํ ํ์
์ ์์ผ๋ฉฐ, Human ํด๋์ค์ ์ธ์คํด์ค์ธ kimcoding์์ kimcoding.sleep์ผ๋ก ์ฌ์ฉํ ์ ์์ผ๋๊น
๐์ฐธ๊ณ
https://developer.mozilla.org/ko/docs/Learn/JavaScript/Objects/Object_prototypes