๊ฐœ๋…์ •๋ฆฌ/JavaScript

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

imKion 2022. 7. 22. 13:32
๐Ÿ’ก ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ
ํ•˜๋‚˜์˜ ๋ชจ๋ธ์ด ๋˜๋Š” ์ฒญ์‚ฌ์ง„(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์˜ ๊ฐ’์ด ๋œ๋‹ค.