[๐Ÿ’ป ์ฝ”๋“œ์Šคํ…Œ์ด์ธ  FE 44๊ธฐ][part 3] ํ”„๋กœํ† ํƒ€์ž…

JiEunยท2023๋…„ 3์›” 15์ผ
0

โœ”๏ธ ์‹œ์ž‘

ํ”„๋กœํ† ํƒ€์ž…์ด ๋ฌด์—‡์ธ์ง€ ํ•™์Šตํ–ˆ๋‹ค.


๐Ÿ“ํ”„๋กœํ† ํƒ€์ž…(Prototype)

  • Javascript๋Š” ํ”„๋กœํ† ํƒ€์ž… ๊ธฐ๋ฐ˜ ์–ธ์–ด์ด๋‹ค.
  • Javascript์—์„œ ๊ฐ์ฒด๋ฅผ ์ƒ์†ํ•˜๊ธฐ ์œ„ํ•ด ํ”„๋กœํ† ํƒ€์ž… ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค.
  • ํ”„๋กœํ† ํƒ€์ž…์€ ์›ํ˜•๊ฐ์ฒด(original form)์ด๋‹ค.
  • ๋ชจํŠผ ๊ฐ์ฒด๋“ค์€ ๋ฉ”์†Œ๋“œ์™€ ์†์„ฑ๋“ค์„ ์ƒ์†๋ฐ›๊ธฐ ์œ„ํ•œ ํ…œํ”Œ๋ฆฟ์œผ๋กœ ํ”„๋กœํ† ํƒ€์ž… ๊ฐ์ฒด(prototype object)๋ฅผ ๊ฐ€์ง„๋‹ค.

ํ”„๋กœํ† ํƒ€์ž… ์ฒด์ธ(prototype chain)

ํ”„๋กœํ† ํƒ€์ž… ๊ฐ์ฒด๋„ ๋˜ ๋‹ค์‹œ ์ƒ์œ„ ํ”„๋กœํ† ํƒ€์ž… ๊ฐ์ฒด๋กœ ๋ถ€ํ„ฐ ๋ฉ”์„œ๋“œ์™€ ์†์„ฑ์„ ๋ฐ›์„ ์ˆ˜๋„ ์žˆ๊ณ  ๊ทธ ์ƒ์œ„ ํ”„๋กœํ† ํƒ€์ž… ๊ฐ์ฒด๋„ ๋™์ผํ•˜๋‹ค.

[ํ”„๋กœํ† ํƒ€์ž… ๊ฐ์ฒด] โฌ…๏ธŽ ์ƒ์† โฌ…๏ธŽ [์ƒ์œ„ ํ”„๋กœํ† ํƒ€์ž…] โฌ…๏ธŽ ์ƒ์† โฌ…๏ธŽ [์ƒ์œ„ ํ”„๋กœํ† ํƒ€์ž…]

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

__proto : ๊ฐœ๋ณ„ ๊ฐ์ฒด์˜ ์†์„ฑ

prototype : ์ƒ์„ฑ์ž์˜ ์†์„ฑ

๋ฐฐ์—ด(Array) = Array ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค

  • ๋ฐฐ์—ด(arr)์€ Array์˜ ์ธ์Šคํ„ด์Šค ์ด๋ฉฐ ํ”„๋กœํ† ํƒ€์ž… ๊ด€๊ณ„์ด๋ฉฐ ํ•ด๋‹น ํ”„๋กœํ† ํƒ€์ž…์—๋Š” ๋‹ค์–‘ํ•œ ๋ฉ”์„œ๋“œ๊ฐ€ ์กด์žฌํ•œ๋‹ค.

ํด๋ž˜์Šค, ์ธ์Šคํ„ด์Šค, ํ”„๋กœํ† ํƒ€์ž…์˜ ๊ด€๊ณ„

ํด๋ž˜์Šค

  • ์„ธ๋ถ€ ์‚ฌํ•ญ(์†์„ฑ)์ด ๋“ค์–ด๊ฐ€์ง€ ์•Š์€ ์ฒญ์‚ฌ์ง„

    ์ผ์ข…์˜ ์›ํ˜•(original form)๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์•„์ด๋””์–ด ์ฒญ์‚ฌ์ง„

์ธ์Šคํ„ด์Šค (์ธ์Šคํ„ด์Šค ๊ฐ์ฒด)

  • ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด ๋งŒ๋“ค์–ด์ง„ ๊ฐ์ฒด

    ํด๋ž˜์Šค์˜ ์‚ฌ๋ก€(instance object)

์ƒ์„ฑ์ž ํ•จ์ˆ˜

  • ์„ธ๋ถ€์‚ฌํ•ญ(์ธ์Šคํ„ด์Šค)๋ฅผ ๋„ฃ๋Š” ๋ฐฉ๋ฒ• โžก๏ธŽ ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด ์„ธ๋ถ€์‚ฌํ•ญ(์†์„ฑ)์„ ๋„ฃ์–ด์ค€๋‹ค.

    ํด๋ž˜์Šค๋Š” ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ์ƒ์„ฑ์ž(constructor)ํ•จ์ˆ˜๋ฅผ ํฌํ•จํ•œ๋‹ค.

ํด๋ž˜์Šค, ์ธ์Šคํ„ด์Šค, ํ”„๋กœํ† ํƒ€์ž…์˜ ๊ด€๊ณ„

class Human { // ํด๋ž˜์Šค
  constructor(name, age) { // ์ƒ์„ฑ์ž ํ•จ์ˆ˜
    this.name = name;
    this.age = age;
  }
  sleep() {
    console.log(`${this.name}์€ ์ž ์— ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค`);
  }
}
let Jieun = new Human('์ง€์€', 27); // ์ธ์Šคํ„ด์Šค

[์‚ฌ๋žŒ] โžก๏ธŽ .prototype โžก๏ธŽ [์‚ฌ๋žŒ.prototype(.sleep)] โžก๏ธŽ new Human() instantiation โžก๏ธŽ [์ง€์€(.sleep)]**

[์‚ฌ๋žŒ] โฌ…๏ธŽ .constructor โฌ…๏ธŽ [์‚ฌ๋žŒ.prototype(.sleep)] โฌ…๏ธŽ proto โฌ…๏ธŽ [์ง€์€(.sleep)]


โœ๏ธ ๋งˆ์น˜๋ฉฐ

ํ”„๋กœํ† ํƒ€์ž…์€ ์›ํ˜•๊ฐ์ฒด์ด๋ฉฐ Javascript๋Š” ํ”„๋กœํ† ํƒ€์ž… ๊ธฐ๋ฐ˜ ์–ธ์–ด์ด๋‹ค.
์ด์™ธ __proto, prototype์ด ๋ฌด์—‡์ธ์ง€ ์–ด๋–ค ์‹์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๋˜ ์‹œ๊ฐ„์ด์˜€๋‹ค.

profile
๐Ÿ’ป ํ”„๋ก ํŠธ์—”๋“œ๋ฅผ ๋ชฉํ‘œ๋กœ ์„ฑ์žฅ ์ค‘! (์•Œ์•„๋ดค๋˜ ๋‚ด์šฉ ๋“ฑ์„ ์ •๋ฆฌํ•˜๊ธฐ)

0๊ฐœ์˜ ๋Œ“๊ธ€