[JS] ํด๋ž˜์Šค์™€ ์ธ์Šคํ„ด์Šค

2022. 7. 22. 13:32ยท๊ฐœ๋…์ •๋ฆฌ/JavaScript
๐Ÿ’ก ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ
ํ•˜๋‚˜์˜ ๋ชจ๋ธ์ด ๋˜๋Š” ์ฒญ์‚ฌ์ง„(blueprint)์„ ๋งŒ๋“ค๊ณ , ๊ทธ ์ฒญ์‚ฌ์ง„์„ ๋ฐ”ํƒ•์œผ๋กœ ํ•œ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“œ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจํ„ด.

์ฒญ์‚ฌ์ง„์€ ํด๋ž˜์Šค(class)๋ผ๊ณ  ๋ถ€๋ฅด๊ณ , ์ฒญ์‚ฌ์ง„์„ ๋ฐ”ํƒ•์œผ๋กœ ๋งŒ๋“  ๊ฐ์ฒด๋ฅผ ์ธ์Šคํ„ด์Šค ๊ฐ์ฒด(instance object) ์ค„์—ฌ์„œ ์ธ์Šคํ„ด์Šค ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

 

ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•


ES5์ด์ „ ๋ฌธ๋ฒ•

function Car(brand, name, color) {
	this.brand = brand;
	this.name = name;
	this.color = color;
} // ์†์„ฑ
Car.prototype.refuel = function(){
	return "์—ฐ๋ฃŒ ๊ณต๊ธ‰";
} // ๋ฉ”์„œ๋“œ
Car.prototype.drive = function(){
	return "์šด์ „ ์‹œ์ž‘";
} // ๋ฉ”์„œ๋“œ

 

ES6 ๋ฌธ๋ฒ•

class Car {
  constructor(brand, name, color){
    this.brand = brand;
    this.name = name;
    this.color = color;
  } // ์†์„ฑ
  refuel(){
    return "์—ฐ๋ฃŒ ๊ณต๊ธ‰";
  } // ๋ฉ”์„œ๋“œ
  drive(){
    return "์šด์ „ ์‹œ์ž‘";
  } // ๋ฉ”์„œ๋“œ
}

ES6๋ถ€ํ„ฐ๋Š” classํ‚ค์œ„๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์•ˆ์— ์ƒ์„ฑ์ž ํ•จ์ˆ˜(constructor)์™€ ๋ฉ”์„œ๋“œ๊ฐ€ ๋“ค์–ด์žˆ์Šต๋‹ˆ๋‹ค.

์†์„ฑ์„ ์ •์˜ํ•  ๋•Œ this ํ‚ค์›Œ๋“œ๊ฐ€ ๋“ฑ์žฅํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ this๋Š” ์ธ์Šคํ„ด์Šค ๊ฐ์ฒด๋ฅผ ์˜๋ฏธํ•˜๋Š”๋ฐ, parameter๋กœ ๋„˜์–ด์˜จ ๋ธŒ๋žœ๋“œ, ์ด๋ฆ„, ์ƒ‰์ƒ ๋“ฑ์€ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ์‹œ ์ง€์ •๋ฉ๋‹ˆ๋‹ค.

 

์†์„ฑ๊ณผ ๋ฉ”์„œ๋“œ

ํด๋ž˜์Šค์— ์†์„ฑ๊ณผ ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•˜๊ณ , ์ธ์Šคํ„ด์Šค์—์„œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ž๋™์ฐจ๋กœ ์˜ˆ๋ฅผ ๋“ค๋ฉด ์†์„ฑ์€ ๋ธŒ๋žœ๋“œ, ์ฐจ ์ด๋ฆ„, ์ƒ‰์ƒ, ํ˜„์žฌ ์—ฐ๋ฃŒ๋Ÿ‰, ์ตœ๊ณ  ์†๋ ฅ ๋“ฑ์œผ๋กœ ์ž๋™์ฐจ์˜ ์ƒํƒœ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

๋ฉ”์„œ๋“œ๋Š” ‘๊ฐ์ฒด์— ๋”ธ๋ฆฐ ํ•จ์ˆ˜’์ž…๋‹ˆ๋‹ค. ์—ฐ๋ฃŒ ๊ณต๊ธ‰, ์šด์ „ ์‹œ์ž‘, ์†๋ ฅ ์กฐ์ ˆ ๋“ฑ ์ž๋™์ฐจ์˜ ๋™์ž‘์„ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

๋ฉ”์„œ๋“œ๋Š” ES5๊นŒ์ง€ ๋ฉ”์„œ๋“œ๋Š” prototype์ด๋ผ๋Š” ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ ES6๋ถ€ํ„ฐ๋Š” classํ‚ค์›Œ๋“œ ์•ˆ์ชฝ์— ๋ฌถ์–ด์„œ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

 

์ธ์Šคํ„ด์Šค์—์„œ ์‚ฌ์šฉ


์œ„์—์„œ ์„ค์ •ํ•œ ์†์„ฑ๊ณผ ๋ฉ”์„œ๋“œ๋ฅผ ์ธ์Šคํ„ด์Šค์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

let avante = new Car("hyundai", "avante", "black")
avante.color; // "black"
avante.drive(); // "์šด์ „ ์‹œ์ž‘"
avante.refuel(); // "์—ฐ๋ฃŒ ๊ณต๊ธ‰"

์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋Š” new ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์ธ ๋‹ค๋ฅธ ํ•จ์ˆ˜์™€ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด ํด๋ž˜์Šค๋Š” ๋ณดํ†ต ๋Œ€๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•˜๋ฉฐ ์ผ๋ฐ˜๋ช…์‚ฌ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ํ•จ์ˆ˜๋Š” ์ ์ ˆํ•œ ๋™์‚ฌ๋ฅผ ํฌํ•จํ•˜๊ณ  ์†Œ๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ๊ฐ์˜ ์ธ์Šคํ„ด์Šค๋Š” ๊ณ ์œ ํ•œ ์†์„ฑ๊ณผ ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ–๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

์šฉ์–ด ์ •๋ฆฌ


  1. constructor : ์ธ์Šคํ„ด์Šค๊ฐ€ ์ดˆ๊ธฐํ™”๋  ๋•Œ ์‹คํ–‰ํ•˜๋Š” ์ƒ์„ฑ์ž ํ•จ์ˆ˜
  2. prototype: ๋ชจ๋ธ์˜ ์ฒญ์‚ฌ์ง„์„ ๋งŒ๋“ค ๋•Œ ์“ฐ๋Š” ์›ํ˜• ๊ฐ์ฒด(original form)
  3. this: ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋  ๋•Œ, ํ•ด๋‹น scope๋งˆ๋‹ค ์ƒ์„ฑ๋˜๋Š” ๊ณ ์œ ํ•œ ์‹คํ–‰ context(execution context). newํ‚ค์›Œ๋“œ๋กœ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ–ˆ์„ ๋•Œ์—๋Š” ํ•ด๋‹น ์ธ์Šคํ„ด์Šค๊ฐ€ this์˜ ๊ฐ’์ด ๋œ๋‹ค.
์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)
'๊ฐœ๋…์ •๋ฆฌ/JavaScript' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [JS] ํ”„๋กœํ† ํƒ€์ž…๊ณผ ํด๋ž˜์Šค
  • ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ_OOP
  • [TIL] JavaScript Koans
  • [JavaScript] ์›์‹œ ์ž๋ฃŒํ˜•๊ณผ ์ฐธ์กฐ ์ž๋ฃŒํ˜•
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)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

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

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

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

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

  • ์ตœ๊ทผ ๊ธ€

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

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