[JS] ํ”„๋กœํ† ํƒ€์ž…๊ณผ ํด๋ž˜์Šค

2022. 7. 25. 09:10ยท๊ฐœ๋…์ •๋ฆฌ/JavaScript
๐Ÿ’ก ํ”„๋กœํ† ํƒ€์ž…
JavaScript์—์„œ ์ƒ์†์„ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋งค์ปค๋‹ˆ์ฆ˜

ํด๋ž˜์Šค


JavaScript์—๋Š” class๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ทธ ์—ญํ• ์„ ๋Œ€์‹ ํ•ฉ๋‹ˆ๋‹ค.

class Human {
  constructor(name, age) {
    this.name = name;
    this.age = age;
		this.sayHello = function() {
	    console.log(this.name + " said hello");
	  }
	}
}

new ํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•ด Human์ƒ์„ฑ์ž ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์ „๋‹ฌ ์ธ์ž๋กœ name๊ณผ age๋ฅผ ์ค๋‹ˆ๋‹ค.

let steve = new Human('steve', 30);
steve.sayHello(); // "steve said hello"
let kim = new Human("kim", 25);
kim.sayHello(); // "kim said hello"

์ด๋ ‡๊ฒŒ ๋งŒ๋“  ์ธ์Šคํ„ด์Šค ๊ฐ์ฒด๋“ค์€ ๊ณตํ†ต์ ์œผ๋กœ ๋ถ€๋ชจ์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ƒ์† ๋ฐ›์•„์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ƒ์†๋ฐ›์€ ์†์„ฑ๊ณผ ๋ฉ”์„œ๋“œ๋Š” ์ž์‹ ๊ฐ์ฒด๊ฐ€ ์ง์ ‘ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋งŒ๋“ค์–ด์ง€๋ฉด์„œ ์ž๋™์œผ๋กœ [Prototype]์ด๋ผ๋Š” ๊ฐ์ฒด๊ฐ€ ๋งŒ๋“ค์–ด์กŒ์Šต๋‹ˆ๋‹ค. ์ด๊ฒŒ ๋ญ˜๊นŒ์š”?

 

ํ”„๋กœํ† ํƒ€์ž…


๋˜‘๊ฐ™์€ ๋ฉ”์„œ๋“œ๋ฅผ ๊ตณ์ด ๋ชจ๋“  ์ž์‹ ๊ฐ์ฒด๋“ค์ด ๊ฐ€์ง€๊ณ  ์žˆ์„ ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค.

๋ถˆํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋‚ญ๋น„ํ•˜์ง€ ์•Š๊ธฐ ์œ„ํ•ด ๋ถ€๋ชจ ๊ฐ์ฒด(์ƒ์„ฑ์ž)๋งŒ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ  ์ž์‹๋“ค์€ ๊ทธ๊ฒƒ์„ ์ฐธ์กฐ, ์กฐํšŒํ•ด์„œ ๊ฐ€์ ธ๋‹ค ์“ฐ๋Š” ํŽธ์ด ๋” ์ข‹์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ ์œ„ํ•ด ํ”„๋กœํ† ํƒ€์ž…์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

Human์˜ ํ”„๋กœํ† ํƒ€์ž… ๊ฐ์ฒด์— ๋ฉ”์„œ๋“œ๋ฅผ ๋„ฃ์–ด๋‘๋ฉด Human์ƒ์„ฑ์ž๋กœ ๋งŒ๋“  ๋ชจ๋“  ๊ฐ์ฒด๋“ค์€ ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ ์ง์ ‘ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์•„๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

class Human {
  constructor(name, age) {
    this.name = name;
    this.age = age;
		this.sayHello = function() {
	    console.log(this.name + " said hello");
	  }
	}
  sleep() {
    console.log(`${this.name}์€ ์ž ์— ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค`);
  }
}

sleep๋ฉ”์„œ๋“œ๋Š” sayHello์™€ ๋‹ฌ๋ฆฌ prototype์— ๋„ฃ์—ˆ์Šต๋‹ˆ๋‹ค.

let steve = new Human('steve', 30);

steve์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ฝ˜์†”์— ์ฐ์–ด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‚˜์˜ต๋‹ˆ๋‹ค.

sayHello์™€ ๋‹ฌ๋ฆฌ sleep์€ ํ”„๋กœํ† ํƒ€์ž… ๊ฐ์ฒด ์•ˆ์— ๋“ค์–ด์žˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋กœํ† ํƒ€์ž… ๊ตฌ์กฐ๋„

๊ฐ์ฒด ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๊ตฌ์กฐํ™”์‹œํ‚ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ทธ๋ฆผ์ด ๋‚˜์˜ต๋‹ˆ๋‹ค.

Human ๊ฐ์ฒด์˜ prototype ํ”„๋กœํผํ‹ฐ๋Š” Human์˜ prototype ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  prototype ๊ฐ์ฒด๋Š” constructor๋ผ๋Š” ํ”„๋กœํผํ‹ฐ๋ฅผ ์ƒ์„ฑํ•ด Human ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค.

steve ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ __proto__ํ”„๋กœํผํ‹ฐ๊ฐ€ ๊ฐ™์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. __proto__๋Š” Human์˜ prototype ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— Human.prototype์œผ๋กœ Human์˜ prototype ๊ฐ์ฒด์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ณ , steve.__proto__๋ฅผ ํ†ตํ•ด์„œ๋„ Human์˜ prototype ๊ฐ์ฒด์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ์„œ๋กœ๊ฐ€ ์„œ๋กœ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํŠน์„ฑ์œผ๋กœ ์ธํ•ด์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์‹์ด ์„ฑ๋ฆฝํ•ฉ๋‹ˆ๋‹ค.

Human.prototype.constructor === Human;
Human.prototype === steve.__proto__;
Human.prototype.sleep === steve.sleep;

 

๋ ˆํผ๋Ÿฐ์Šค

  • ์ฝ”๋“œ์Šคํ…Œ์ด์ธ 
  • https://www.zerocho.com/category/JavaScript/post/573c2acf91575c17008ad2fc
  • https://velog.io/@h0ngwon/Javascript-proto-vs-prototype-%EC%B0%A8%EC%9D%B4
  • https://developer.mozilla.org/ko/docs/Learn/JavaScript/Objects/Object_prototypes
์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)
'๊ฐœ๋…์ •๋ฆฌ/JavaScript' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [JS] Runtime๊ณผ ๋น„๋™๊ธฐ ์‹คํ–‰
  • [JS] ํ”„๋กœํ† ํƒ€์ž… ์ฒด์ธ
  • ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ_OOP
  • [JS] ํด๋ž˜์Šค์™€ ์ธ์Šคํ„ด์Šค
imKion
imKion
Front-end Developer
  • imKion
    Kion
    imKion
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (46)
      • ๋ฌธ์ œ ํ•ด๊ฒฐ (6)
        • ๋ฆฌํŒฉํ„ฐ๋ง (3)
      • ํšŒ๊ณ  (8)
      • ๊ฐœ๋…์ •๋ฆฌ (29)
        • JavaScript (10)
        • React (9)
        • Next.JS (2)
        • WEB (5)
        • CS ์™ธ (2)
      • ์•Œ๊ณ ๋ฆฌ์ฆ˜ (2)
        • ์ฝ”ํ”Œ๋ฆฟ (1)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    JavaScript
    til
    OOP
    REACT
    ํ”„๋ก ํŠธ์—”๋“œ
    frontend
    react 18
    ํšŒ๊ณ 
    typeScript
    ์ฝ”๋“œ์Šคํ…Œ์ด์ธ 
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.2
imKion
[JS] ํ”„๋กœํ† ํƒ€์ž…๊ณผ ํด๋ž˜์Šค
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”