๐Ÿ“ŒLanguage/JavaScript

TIL) ํ”„๋กœํ† ํƒ€์ž… ์ •๋ฆฌ

hellohailie 2022. 5. 26. 01:42

 

JavaScript๋Š” ํ”„๋กœํ† ํƒ€์ž…(์›ํ˜• ๊ฐ์ฒด) ๊ธฐ๋ฐ˜ ์–ธ์–ด
→ ๊ฐ์ฒด๋ฅผ ์ƒ์†ํ•˜๊ธฐ ์œ„ํ•ด ํ”„๋กœํ† ํƒ€์ž…์„ ์ด์šฉํ•œ๋‹ค. 

 

์ƒ์†๋˜๋Š” ์†์„ฑ๊ณผ ๋ฉ”์†Œ๋“œ๋“ค์€ ๊ฐ ๊ฐ์ฒด๊ฐ€ ์•„๋‹ˆ๋ผ ๊ฐ์ฒด์˜ ์ƒ์„ฑ์ž์˜ prototype์ด๋ผ๋Š” ์†์„ฑ์— ์ •์˜๋˜์–ด ์žˆ๋‹ค.

ํ”„๋กœํ† ํƒ€์ž… ์ฒด์ธ์—์„œ ํ•œ ๊ฐ์ฒด์˜ ๋ฉ”์†Œ๋“œ์™€ ์†์„ฑ๋“ค์ด ๋‹ค๋ฅธ ๊ฐ์ฒด๋กœ ๋ณต์‚ฌ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ณ , ์ฒด์ธ์„ ํƒ€๊ณ  ์˜ฌ๋ผ๊ฐ€๋ฉฐ ์ ‘๊ทผํ•  ๋ฟ์ด๋‹ค.

 

์ƒ์† ๋ฐ›๋Š” ๋ฉค๋ฒ„๋“ค์€ prototype ์†์„ฑ์— ์ •์˜๋˜์–ด ์žˆ๋‹ค

Object.๋กœ ์‹œ์ž‘ํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ, Object.prototype.๋กœ ์‹œ์ž‘ํ•œ๋‹ค. 

 


prototype ์†์„ฑ๋„ ํ•˜๋‚˜์˜ ๊ฐ์ฒด์ด๋ฉฐ ํ”„๋กœํ† ํƒ€์ž… ์ฒด์ธ์„ ํ†ตํ•ด ์ƒ์†ํ•˜๊ณ ์ž ํ•˜๋Š” ์†์„ฑ๊ณผ ๋ฉ”์†Œ๋“œ๋ฅผ ๋‹ด์•„๋‘๋Š” ๋ฒ„ํ‚ท์œผ๋กœ ์ฃผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ์ฒด์ด๋‹ค. ๊ทธ๋ž˜์„œ Object.is(), Object.keys()๋“ฑ prototype ๋ฒ„ํ‚ท์— ์ •์˜๋˜์ง€ ์•Š์€ ๋ฉค๋ฒ„๋“ค์€ ์ƒ์†๋˜์ง€ ์•Š๋Š”๋‹ค. 

 

  • ํ”„๋กœํ† ํƒ€์ž… ๊ฐ์ฒด: __proto__ ์†์„ฑ์œผ๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ๋‚ด์žฅ ๊ฐ์ฒด
  • ํ”„๋กœํ† ํƒ€์ž… ์†์„ฑ: ์ƒ์†์‹œํ‚ค๋ ค๋Š” ๋ฉค๋ฒ„๋“ค์ด ์ •์˜๋œ ๊ฐ์ฒด // ํ”„๋กœํ† ํƒ€์ž… ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•œ๋‹ค.
  • __proto__ : ๊ฐ์ฒด๊ฐ€ ๋งŒ๋“ค์–ด์ง€๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ ์›ํ˜•์ธ ํ”„๋กœํ† ํƒ€์ž… ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๋งํฌ๋ฅผ ๊ฐ€์ง„๋‹ค.

 

 

๐Ÿ‘‡๐Ÿ‘‡๐Ÿ‘‡๐Ÿ‘‡๐Ÿ‘‡

Object.prototype

prototype ์†์„ฑ์€ Javascript์—์„œ ๊ฐ€์žฅ ํ—ท๊ฐˆ๋ฆฌ๋Š” ๋ช…์นญ์ค‘ ํ•˜๋‚˜์ด๋‹ค. 

๋ณดํ†ต this๊ฐ€ ํ˜„์žฌ ๊ฐ์ฒด์˜ ํ”„๋กœํ† ํƒ€์ž… ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ๊ฒƒ์ด๋ผ ์˜คํ•ดํ•˜์ง€๋งŒ ๊ทธ๋ ‡์ง€ ์•Š๋‹ค.(ํ”„๋กœํ† ํƒ€์ž… ๊ฐ์ฒด๋Š” __proto__ ์†์„ฑ์œผ๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ๋‚ด์žฅ ๊ฐ์ฒด์ด๋‹ค!) ๊ทธ๋ž˜์„œ ๋Œ€์‹ ์— prototype ์†์„ฑ์€ ์ƒ์† ์‹œํ‚ค๋ ค๋Š” ๋ฉค๋ฒ„๋“ค์ด ์ •์˜๋œ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

 

์ „์—ญ ๊ฐ์ฒด์ธ StringDateNumberArray์˜ ํ”„๋กœํ† ํƒ€์ž…์— ์ •์˜๋œ ๋ฉ”์†Œ๋“œ์™€ ์†์„ฑ๋“ค์„ ์ฒดํฌํ•ด ๋ณด๋ฉด, ์ด ํ”„๋กœํ† ํƒ€์ž… ๊ฐ์ฒด๋“ค์—๋Š” ์ด๋ฏธ ๋งŽ์€ ์ˆ˜์˜ ๋ฉ”์†Œ๋“œ๊ฐ€ ์ •์˜๋˜์–ด ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

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