๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“‚ Language/JavaScript

์™œ ES6๋ถ€ํ„ฐ ํด๋ž˜์Šค ๊ฐœ๋…์ด ์ถ”๊ฐ€๋œ๊ฑธ๊นŒ?

by Dev. Ella 2023. 9. 7.

์งˆ๋ฌธ์˜ ๋ฐฐ๊ฒฝ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ECMAScript์˜ ํžˆ์Šคํ† ๋ฆฌ์™€ ํด๋ž˜์Šค ๊ฐœ๋…์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•˜๋‹ค๊ฐ€ ๋ฌธ๋“, ES5์—์„œ๋„ ์ƒ์„ฑ์ž ํ•จ์ˆ˜์™€ ํ”„๋กœํ† ํƒ€์ž…์„ ํ†ตํ•ด ์ถฉ๋ถ„ํžˆ ๊ฐ์ฒด์ง€ํ–ฅ ์–ธ์–ด์˜ ์ƒ์†์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์™œ ํด๋ž˜์Šค ๊ฐœ๋…์„ ์ถ”๊ฐ€ํ–ˆ์„๊นŒ ๊ถ๊ธˆ์ฆ์ด ์ƒ๊ฒผ๋‹ค. 

 

๊ถ๊ธˆ์ฆ์— ๋Œ€ํ•œ ํ•ด๋‹ต์„ [๋ฌธ์ œ ์ •์˜ - ํ•ด๊ฒฐ]์˜ ํ‹€๋กœ ์‚ดํŽด๋ณด์ž.

 

 

๋ฌธ์ œ ์ •์˜: ์ถ”๊ฐ€๋˜๊ธฐ ์ „์˜ ์ƒํ™ฉ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํด๋ž˜์Šค ๊ฐœ๋…์ด ES6(2015)์—์„œ ์ถ”๊ฐ€๋œ ์ด์œ ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

1. ์“ฐ๋Š” ์‚ฌ๋žŒ์ด ์–ด๋ ต๋‹ค๋Š”๋ฐ ์–ด๋–กํ•ด

ES5๊นŒ์ง€๋Š” ํด๋ž˜์Šค ์—†์ด๋„ ์ƒ์„ฑ์ž ํ•จ์ˆ˜์™€ ํ”„๋กœํ† ํƒ€์ž…์„ ํ†ตํ•ด ๊ฐ์ฒด์ง€ํ–ฅ ์–ธ์–ด์˜ ์ƒ์†์„ ๊ตฌํ˜„ํ•  ์ˆ˜๋Š” ์žˆ์—ˆ์œผ๋‚˜, ๊ธฐ์กด ์ž๋ฐ”๋‚˜ C+๊ณผ ๊ฐ™์ด ํด๋ž˜์Šค ๊ธฐ๋ฐ˜์˜ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ์ต์ˆ™ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋“ค์—๊ฒŒ๋Š” ํ˜ผ๋ž€์„ ์ฃผ์—ˆ๋‹ค. ์ด๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์–ด๋ ต๊ฒŒ ๋Š๋ผ๊ฒŒ ํ•˜๋Š” ์žฅ๋ฒฝ๊ณผ๋„ ๊ฐ™์•˜๋‹ค.

 

2. ์ฝ”๋“œ ์“ฐ๊ธฐ ๊ท€์ฐฎ๊ณ  ์œ ์ง€๋ณด์ˆ˜ ์–ด๋ ค์›Œ

๊ธฐ์กด ๊ฐ์ฒด๋ฅผ ์ƒ์†ํ•˜๊ณ  ํ™•์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ๋น„๊ต์  ๋ณต์žกํ–ˆ๊ธฐ์—, ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜ํ•˜๋Š” ๊ฒƒ์ด ์–ด๋ ค์› ๋‹ค. 

 

3. ์ƒ์†๋„ ์–ด๋ ค์šด๋ฐ ์˜ค๋ฅ˜๋„ ๋‚œ๋‹ค๊ณ 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ํด๋ž˜์Šค ๊ฐœ๋…์ด ๋“ฑ์žฅํ•˜๊ธฐ ์ „์—๋Š” ๊ฐ์ฒด ์ƒ์„ฑ์„ ์œ„ํ•ด ์ƒ์„ฑ์ž ํ•จ์ˆ˜์™€ ํ”„๋กœํ† ํƒ€์ž…์„ ์‚ฌ์šฉํ•ด์•ผ ํ–ˆ๋‹ค. ์ด๋Š” ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๊ณ , ์ƒ์†์„ ์ œ๋Œ€๋กœ ๋‹ค๋ฃจ๊ธฐ ์–ด๋ ค์› ๋‹ค.

 

์ด์— ES6์—์„œ๋Š” ํด๋ž˜์Šค ๊ธฐ๋ฐ˜ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์™€ ๋งค์šฐ ํก์‚ฌํ•œ ์ƒˆ๋กœ์šด ๊ฐ์ฒด ์ƒ์„ฑ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์ œ์‹œํ–ˆ๋‹ค.

 

 

๋ฌธ๋ฒ•์  ์„คํƒ• (syntactic sugar)?

๊ทธ๋ ‡๋‹ค๊ณ  ํ•ด์„œ ํด๋ž˜์Šค๊ฐ€ ํ˜œ์„ฑ์ฒ˜๋Ÿผ ๋“ฑ์žฅํ•ด ๊ธฐ์กด์˜ ํ”„๋กœํ† ํƒ€์ž… ๊ธฐ๋ฐ˜์˜ ๊ฐ์ฒด์ง€ํ–ฅ ๋ชจ๋ธ์„ ์ €๋ฆฌ ๊ฐ€๋ผ! ํ•˜๋ฉฐ ์ƒˆ๋กญ๊ฒŒ ํด๋ž˜์Šค ๊ธฐ๋ฐ˜ ๊ฐ์ฒด์ง€ํ–ฅ ๋ชจ๋ธ์„ ์ œ๊ณตํ•œ ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ์‚ฌ์‹ค ํด๋ž˜์Šค๋Š” ์ผ์ข…์˜ ํ•จ์ˆ˜๋‹ค.

 

๊ธฐ์กด ํ”„๋กœํ† ํƒ€์ž… ๊ธฐ๋ฐ˜ ํŒจํ„ด์„ ํด๋ž˜์Šค ๊ธฐ๋ฐ˜ ํŒจํ„ด์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š”, ์ผ์ข…์˜ '๋ฌธ๋ฒ•์  ์„คํƒ•' ๊ฐ™์€ ์กฐ๋ฏธ๋ฃŒ ์—ญํ• ์ธ ์…ˆ์ด๋‹ค. ํ•˜์ง€๋งŒ ์ด ์„ค๋ช…์€ ์—ฌ๋Ÿฌ ์˜๊ฒฌ์ด ์žˆ๋Š”๋ฐ, ํ˜น์ž๋Š” ํด๋ž˜์Šค๋ฅผ ๋‹จ์ˆœํ•œ ๋ฌธ๋ฒ•์  ์„คํƒ•์ด๋ผ๊ธฐ๋ณด๋‹ค '์ƒˆ๋กœ์šด ๊ฐ์ฒด ์ƒ์„ฑ์˜ ๋ฉ”์ปค๋‹ˆ์ฆ˜'์ด๋ผ๊ณ  ๋งํ•œ๋‹ค. ๊ทธ๋ƒฅ ์ฐธ๊ณ  ์ •๋„๋งŒ ํ•ด๋‘์ž.

 

 

๊ธฐ์กด ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋ž‘ ๋‹ค๋ฅธ ์ 

ํด๋ž˜์Šค์™€ ์ƒ์„ฑ์ž ํ•จ์ˆ˜ ๋ชจ๋‘ ํ”„๋กœํ† ํƒ€์ž… ๊ธฐ๋ฐ˜์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜์ง€๋งŒ, (๋‹น์—ฐํžˆ) ์ •ํ™•ํžˆ ๋™์ผํ•˜๊ฒŒ ๋™์ž‘ํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค. ๋ช‡ ๊ฐ€์ง€ ์ฐจ์ด๊ฐ€ ์žˆ๋Š”๋ฐ, ์š”์•ฝํ•˜์ž๋ฉด ํด๋ž˜์Šค๊ฐ€ ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋ณด๋‹ค ์—„๊ฒฉํ•˜๊ณ , ์ƒ์„ฑ์ž ํ•จ์ˆ˜์—์„œ๋Š” ์ œ๊ณตํ•˜์ง€ ์•Š๋Š” ์ถ”๊ฐ€ ๊ธฐ๋Šฅ๋„ ์ œ๊ณตํ•œ๋‹ค.

 

์ฐจ์ด์ ์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

1. new ์—ฐ์‚ฐ์ž
- ์ƒ์„ฑ์ž ํ•จ์ˆ˜: new ์—ฐ์‚ฐ์ž ์—†์ด ํ˜ธ์ถœํ•˜๋ฉด ์ผ๋ฐ˜ ํ•จ์ˆ˜๋กœ์„œ ํ˜ธ์ถœ๋œ๋‹ค.
- ํด๋ž˜์Šค: new ์—ฐ์‚ฐ์ž ์—†์ด ํ˜ธ์ถœํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. (๋‚˜์œ ๊ฒŒ ์•„๋‹˜)

2. extends, super
- ์ƒ์„ฑ์ž ํ•จ์ˆ˜: ์ƒ์†์„ ์ง€์›ํ•˜๋Š” extends์™€ super ํ‚ค์›Œ๋“œ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.
- ํด๋ž˜์Šค: ์ƒ์†์„ ์ง€์›ํ•˜๋Š” extends์™€ super ํ‚ค์›Œ๋“œ๋ฅผ ์ง€์›ํ•œ๋‹ค.

3. ํ˜ธ์ด์ŠคํŒ…
- ์ƒ์„ฑ์ž ํ•จ์ˆ˜: ์„ ์–ธ๋ฌธ์œผ๋กœ ์ •์˜๋œ ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋Š” ํ•จ์ˆ˜ ํ˜ธ์ด์ŠคํŒ…์ด, ํ‘œํ˜„์‹์œผ๋กœ ์ •์˜๋œ ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋Š” ๋ณ€์ˆ˜ ํ˜ธ์ด์ŠคํŒ…์ด ๋ฐœ์ƒํ•œ๋‹ค.
- ํด๋ž˜์Šค: ํ˜ธ์ด์ŠคํŒ…์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋™์ž‘ํ•œ๋‹ค.

4. strict mode
- ์ƒ์„ฑ์ž ํ•จ์ˆ˜: ์•”๋ฌต์ ์œผ๋กœ strict mode๊ฐ€ ์ง€์›๋˜์ง€ ์•Š๋Š”๋‹ค.
- ํด๋ž˜์Šค: ํด๋ž˜์Šค ๋‚ด์˜ ๋ชจ๋“  ์ฝ”๋“œ๋Š” ์•”๋ฌต์ ์œผ๋กœ strict mode๊ฐ€ ์ง€์ • ๋ฐ ์‹คํ–‰๋˜๋ฉฐ, ํ•ด์ œํ•  ์ˆ˜ ์—†๋‹ค.

 

์ƒ์„ฑ์ž ํ•จ์ˆ˜์™€ ํด๋ž˜์Šค๋Š” ํ”„๋กœํ† ํƒ€์ž… ๊ธฐ๋ฐ˜์˜ ๊ฐ์ฒด์ง€ํ–ฅ์„ ๊ตฌํ˜„ํ–ˆ๋‹ค๋Š” ์ ์—์„œ๋Š” ๋งค์šฐ ์œ ์‚ฌํ•˜์ง€๋งŒ, ํด๋ž˜์Šค๋Š” ์ƒ์„ฑ์ž ํ•จ์ˆ˜ ๊ธฐ๋ฐ˜์˜ ๊ฐ์ฒด ์ƒ์„ฑ ๋ฐฉ์‹๋ณด๋‹ค ๊ฒฌ๊ณ ํ•˜๊ณ  ๋ช…๋ฃŒํ•œ ํŽธ์ด๋‹ค. 

 

ํŠนํžˆ 3. extends์™€ super ํ‚ค์›Œ๋“œ๋Š” ๊ธฐ์กด์— ์–ด๋ ค์› ๋˜ ์ƒ์† ๊ด€๊ณ„ ๊ตฌํ˜„์„ ๋”์šฑ ๊ฐ„๊ฒฐํ•˜๊ณ ๋„ ๋ช…๋ฃŒํ•˜๊ฒŒ ํ•ด ์ค€๋‹ค.

 

 

ํ•ด๊ฒฐ: ES6์—์„œ ํด๋ž˜์Šค์˜ ์ถ”๊ฐ€์™€ ํšจ๊ณผ

ES6์—์„œ ํด๋ž˜์Šค๋ฅผ ๋„์ž…ํ•˜์—ฌ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๋”์šฑ ๊ฐ„ํŽธํ•˜๊ฒŒ ๋งŒ๋“ค์—ˆ๋‹ค๊ณ  ํ•˜๋Š”๋ฐ, ์•„๋ž˜์˜ ์ฝ”๋“œ๋กœ ๋จผ์ € ๊ทธ ํšจ๊ณผ๋ฅผ ์ฒด๊ฐํ•ด ๋ณด์ž.

 

ํด๋ž˜์Šค ์‚ฌ์šฉ ์ „

// ES5 ์ƒ์„ฑ์ž ํ•จ์ˆ˜
function Person(name) {
  this.name = name;
}

// ํ”„๋กœํ† ํƒ€์ž… ๋ฉ”์†Œ๋“œ
Person.prototype.sayHello = function() {
  console.log(`Hello, my name is ${this.name}`);
};

// ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ
const person = new Person('Ella');
// ํ”„๋กœํ† ํƒ€์ž… ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ
person.sayHello(); // "Hello, my name is Ella"

 

ํด๋ž˜์Šค ์‚ฌ์šฉ ํ›„

// ES6 ํด๋ž˜์Šค ์„ ์–ธ๋ฌธ
class Person {
  // ์ƒ์„ฑ์ž
  constructor(name) {
    // ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ๋ฐ ์ดˆ๊ธฐํ™”
    this.name = name;
  }
  // ํ”„๋กœํ† ํƒ€์ž… ๋ฉ”์†Œ๋“œ
  sayHello() {
    console.log(`Hello, my name is ${this.name}`);
  }
}

// ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ
const person = new Person('Ella');
// ํ”„๋กœํ† ํƒ€์ž… ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ
person.sayHello(); // "Hello, my name is Ella"

 

์ฑ… <๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ Deep Dive>์—์„œ๋„ ์ฐจ์ด์ ์„ ํ•œ๋ˆˆ์— ๋ณด๊ธฐ ์‰ฝ๊ฒŒ ์„ค๋ช…ํ•ด ๋‘์–ด ๊ฐ€์ ธ์™”๋‹ค.

์ถœ์ฒ˜: ์ฑ… <๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ Deep Dive>

 

์š”์•ฝํ•˜์ž๋ฉด, ์ด๋Ÿฐ ๊ฒŒ ์ข‹์•„์กŒ๋‹ค

ํด๋ž˜์Šค ์‚ฌ์šฉ์œผ๋กœ ์ธํ•œ ํšจ๊ณผ๋ฅผ ๋‹ค์‹œ ํ•œ๋ฒˆ ๊ธ€๋กœ ์š”์•ฝํ•ด ๋ณด์ž๋ฉด, ์•„๋ž˜์™€ ๊ฐ™๋‹ค. 

 

1. ๊ฐ€๋…์„ฑ ๊ฐœ์„ 

ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•ด ์ฝ”๋“œ๊ฐ€ ๋” ์ฝ๊ธฐ ์‰ฝ๊ณ  ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์›Œ์กŒ๋‹ค. ๋”ฑ ๋ด๋„ ๊ฐ์ฒด ์ƒ์„ฑ๊ณผ ๋ฉ”์†Œ๋“œ ์ •์˜๊ฐ€ ๋” ๊ฐ„๊ฒฐํ•ด์กŒ๋‹ค.

 

2. ์ƒ์† ์ง€์›

์ƒ์†์„ ๋” ์‰ฝ๊ฒŒ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค. 'extends'๋ฅผ ์‚ฌ์šฉํ•ด ๋‹ค๋ฅธ ํด๋ž˜์Šค๋ฅผ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๊ณ , 'super'๋ฅผ ์‚ฌ์šฉํ•ด ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์ƒ์†๋ฐ›๊ณ  ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.

 

3. ์ •์  ๋ฉ”์†Œ๋“œ

ํด๋ž˜์Šค ๋‚ด๋ถ€์— 'static'์„ ์‚ฌ์šฉํ•ด ์ •์  ๋ฉ”์†Œ๋“œ๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋Š” ํด๋ž˜์Šค ๋ ˆ๋ฒจ์—์„œ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์šฉํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. ์ฐธ๊ณ ๋กœ ์ •์  ๋ฉ”์„œ๋“œ(Static methods)๋Š” ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ์•„๋‹Œ ํด๋ž˜์Šค ์ž์ฒด์— ์†ํ•˜๋Š” ๋ฉ”์„œ๋“œ์ด๋‹ค. ๋”ฐ๋ผ์„œ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋”ฐ๋กœ ์ƒ์„ฑํ•˜์ง€ ์•Š์œผ๋ฉด์„œ ํ˜ธ์ถœ์ด ๊ฐ€๋Šฅํ•˜๊ณ , ํด๋ž˜์Šค์˜ ์ƒํƒœ๋ฅผ ์กฐ์ž‘ํ•˜๊ฑฐ๋‚˜ ์กฐํšŒํ•˜๋ฉด์„œ ํด๋ž˜์Šค ๋‚ด๋ถ€์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•˜๋Š” ๋ฐ์— ํ™œ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 

๐Ÿ“Ž ๋‚ด์šฉ ์ฐธ์กฐ

- ์ฑ… <๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ Deep Dive>

๋Œ“๊ธ€