๐Ÿ“– ์Šคํ”„๋ ˆ๋“œ ๋ฌธ๋ฒ•

c_yjยท2022๋…„ 7์›” 14์ผ
0

DeepDive

๋ชฉ๋ก ๋ณด๊ธฐ
32/42
post-thumbnail

ES6์—์„œ ๋„์ž…๋œ ์Šคํ”„๋ ˆ๋“œ ๋ฌธ๋ฒ• ...์€ ํ•˜๋‚˜๋กœ ๋ญ‰์ณ ์žˆ๋Š” ์—ฌ๋Ÿฌ ๊ฐ’๋“ค์˜ ์ง‘ํ•ฉ์„ ํŽผ์ฒ˜์„œ ๊ฐœ๋ณ„์ ์ธ ๊ฐ’๋“ค์˜ ๋ชฉ๋ก์œผ๋กœ ๋งŒ๋“ ๋‹ค.
์Šคํ”„๋ ˆ๋“œ ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€์ƒ์€ Array, String, Map, Set, DOM ์ปฌ๋ ‰์…˜, arguments์™€ ๊ฐ™์ด for...of ๋ฌธ์œผ๋กœ ์ˆœํšŒํ•  ์ˆ˜ ์žˆ๋Š” ์ดํ„ฐ๋Ÿฌ๋ธ”์— ํ•œ์ •

// ...[1,2,3]์€ [1,2,3]์„ ๊ฐœ๋ณ„ ์š”์†Œ๋กœ ๋ถ„๋ฆฌํ•œ๋‹ค(1,2,3)
console.log(...[1,2,3]); // 1 2 3 

// ๋ฌธ์ž์—ด์€ ์ดํ„ฐ๋Ÿฌ๋ธ”์ด๋‹ค.
console.log(...'Hello'); // H e l l o

// Map๊ณผ Set์€ ์ดํ„ฐ๋Ÿฌ๋ธ”์ด๋‹ค.
console.log(...new Map([['a', '1'], ['b', '2']])); // [ 'a', '1' ] [ 'b', '2' ]

//์ดํ„ฐ๋Ÿฌ๋ธ”์ด ์•„๋‹Œ ์ผ๋ฐ˜ ๊ฐ์ฒด๋Š” ์Šคํ”„๋ ˆ๋“œ ๋ฌธ๋ฒ•์˜ ๋Œ€์ƒ์ด ๋  ์ˆ˜ ์—†๋‹ค.
console.log(...[a:1, b:2]);
// TypeError

์Šคํ”„๋ ˆ๋“œ ๋ฌธ๋ฒ•์˜ ๊ฒฐ๊ณผ๋Š” ๊ฐ’์ด ์•„๋‹ˆ๋‹ค. ์Šคํ”„๋ ˆ๋“œ ๋ฌธ๋ฒ• ...์ด ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ์—ฐ์‚ฐํ•˜์—ฌ ๊ฐ’์„ ์ƒ์„ฑํ•˜๋Š” ์—ฐ์‚ฐ์ž๊ฐ€ ์•„๋‹˜์„ ์˜๋ฏธ ์Šคํ”„๋ ˆ๋“œ ๋ฌธ๋ฒ•์˜ ๊ฒฐ๊ณผ๋Š” ๋ณ€์ˆ˜์— ํ• ๋‹นํ•  ์ˆ˜ ์—†๋‹ค.

์Šคํ”„๋ ˆ๋“œ์˜ ๋ฌธ๋ฒ•์˜ ๊ฒฐ๊ณผ๋ฌผ์€ ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ณ , ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„ํ•œ ๊ฐ’์˜ ๋ชฉ๋ก์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฌธ๋งฅ์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ํ•จ์ˆ˜ ํ˜ธ์ถœ๋ฌธ์˜ ์ธ์ˆ˜ ๋ชฉ๋ก
  • ๋ฐฐ์—ด ๋ฆฌํ„ฐ๋Ÿด์˜ ์š”์†Œ ๋ชฉ๋ก
  • ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์˜ ํ”„๋กœํผํ‹ฐ ๋ชฉ๋ก

ํ•จ์ˆ˜ ํ˜ธ์ถœ๋ฌธ์˜ ์ธ์ˆ˜ ๋ชฉ๋ก์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ โ“

const arr = [1,2,3];

// ๋ฐฐ์—ด arr์˜ ์š”์†Œ ์ค‘์—์„œ ์ตœ๋Œ€๊ฐ’์„ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด Math.max๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
const max = Math.max(arr); // NaN

Math.max ๋ฉ”์„œ๋“œ์— ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๋ฐฐ์—ด์„ ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•˜๋ฉด ์ตœ๋Œ€๊ฐ’์„ ๊ตฌํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ NaN์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
์ด ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ์œ„ํ•ด ์Šคํ”„๋ ˆ๋“œ ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•ด๋ณด์ž.
๊ฐ„๊ฒฐํ•˜๊ณ  ๊ฐ€๋…์„ฑ โ†‘

const arr = [1,2,3];

// ์Šคํ”„๋ ˆ๋“œ ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฐ์—ด arr๋ฅผ 1,2,3์œผ๋กœ ํŽผ์ณ์„œ Math.max์— ์ „๋‹ฌํ•œ๋‹ค.
// Math.max(...[1,2,3])์€ Math.max(1,2,3)๊ณผ ๊ฐ™๋‹ค.
const max = Math.max(...arr); // 3

์Šคํ”„๋ ˆ๋“œ ๋ฌธ๋ฒ•์€ Rest ํŒŒ๋ผ๋ฏธํ„ฐ์™€ ํ˜•ํƒœ๊ฐ€ ๋™์ผํ•˜์—ฌ ํ˜ผ๋™ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ฃผ์˜ํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค. ๐Ÿ˜ฎ

  • Rest ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ํ•จ์ˆ˜์— ์ „๋‹ฌ๋œ ์ธ์ˆ˜๋“ค์˜ ๋ชฉ๋ก์„ ๋ฐฐ์—ด๋กœ ์ „๋‹ฌ๋ฐ›๊ธฐ ์œ„ํ•ด ๋งค๊ฐœ๋ณ€์ˆ˜ ์ด๋ฆ„ ์•ž์— ...์„ ๋ถ™์ด๋Š” ๊ฒƒ
  • ์Šคํ”„๋ ˆ๋“œ ๋ฌธ๋ฒ•์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฐ’์ด ํ•˜๋‚˜๋กœ ๋ญ‰์ณ ์žˆ๋Š” ๋ฐฐ์—ด๊ณผ ๊ฐ™์€ ์ดํ„ฐ๋Ÿฌ๋ธ”์„ ํŽผ์ณ์„œ ๊ฐœ๋ณ„์ ์ธ ๊ฐ’๋“ค์˜ ๋ชฉ๋ก์„ ๋งŒ๋“œ๋Š” ๊ฒƒ.
// Rest ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ์ธ์ˆ˜๋“ค์˜ ๋ชฉ๋ก์„ ๋ฐฐ์—ด๋กœ ์ „๋‹ฌ๋ฐ›๋Š”๋‹ค.
function foo(...rest) {
  console.log(rest); // 1,2,3 โ†’ [1,2,3]
}

// ์Šคํ”„๋ ˆ๋“œ ๋ฌธ๋ฒ•์€ ๋ฐฐ์—ด๊ณผ ๊ฐ™์€ ์ดํ„ฐ๋Ÿฌ๋ธ”์„ ํŽผ์ณ์„œ ๊ฐœ๋ณ„์ ์ธ ๊ฐ’๋“ค์˜ ๋ชฉ๋ก์„ ๋งŒ๋“ ๋‹ค.
// [1,2,3] โ†’ 1,2,3
foo(... [1,2,3]);

๋ฐฐ์—ด ๋ฆฌํ„ฐ๋Ÿด ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ โ“

์Šคํ”„๋ ˆ๋“œ ๋ฌธ๋ฒ•์„ ๋ฐฐ์—ด ๋ฆฌํ„ฐ๋Ÿด์—์„œ ์‚ฌ์šฉํ•˜๋ฉด ๊ธฐ์กด์˜ ๋ฐฉ์‹๋ณด๋‹ค ๋”์šฑ ๊ฐ„๊ฒฐํ•˜๊ณ  ๊ฐ€๋…์„ฑ ์ข‹๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค!

Concat

ES5์—์„œ 2๊ฐœ์˜ ๋ฐฐ์—ด์„ 1๊ฐœ์˜ ๋ฐฐ์—ด๋กœ ๊ฒฐํ•ฉํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ concat ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉ

// ES5
var arr = [1,2].concat([3,4]);
console.log(arr); // [1,2,3,4]

//ES6
const arr = [...[1,2], ...[3,4]];
console.log(arr); // [1,2,3,4]

splice

ES5์—์„œ ์–ด๋–ค ๋ฐฐ์—ด์˜ ์ค‘๊ฐ„์— ๋‹ค๋ฅธ ๋ฐฐ์—ด์˜ ์š”์†Œ๋“ค์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•˜๋ ค๋ฉด splice ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉ.
์Šคํ”„๋ ˆ๋“œ ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•˜์ž

// ES6
const arr1 = [1,4];
const arr2 = [2,3];

arr1.splice(1,0, ...arr2);
console.log(arr1); / [1,2,3,4]

๋ฐฐ์—ด ๋ณต์‚ฌ

ES5์—์„œ ๋ฐฐ์—ด์„ ๋ณต์‚ฌํ•˜๋ ค๋ฉด slice ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉ

// ES6
const origin = [1,2];
const copy = [...origin];

console.log(copy); // [1,2]
console.log(copy === origin); // false

์›๋ณธ ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ๋ฅผ ์–•์€ ๋ณต์‚ฌํ•˜์—ฌ ์ƒˆ๋กœ์šด ๋ณต์‚ฌ๋ณธ์„ ์ƒ์„ฑ.

์ดํ„ฐ๋Ÿฌ๋ธ”์„ ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜

ES5์—์„œ ์ดํ„ฐ๋Ÿฌ๋ธ”์„ ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ํ•˜๋ ค๋ฉด Function.prototype.apply ๋˜๋Š” Function.prototype.call ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ slice ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœ
์Šคํ”„๋ ˆ๋“œ ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด ์ข€ ๋” ๊ฐ„ํŽธํ•˜๊ฒŒ ์ดํ„ฐ๋Ÿฌ๋ธ”์„ ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค. arguments ๊ฐ์ฒด๋Š” ์ดํ„ฐ๋Ÿฌ๋ธ”์ด๋ฉด์„œ ์œ ์‚ฌ ๋ฐฐ์—ด ๊ฐ์ฒด๋‹ค. ๋”ฐ๋ผ์„œ ์Šคํ”„๋ ˆ๋“œ ๋ฌธ๋ฒ•์˜ ๋Œ€์ƒ์ด ๋  ์ˆ˜ ์žˆ๋‹ค.

function sum() {
  // ์ดํ„ฐ๋Ÿฌ๋ธ”์ด๋ฉด์„œ ์œ ์‚ฌ ๋ฐฐ์—ด ๊ฐ์ฒด์ธ arguments๋ฅผ ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜
  return [...arguments].reduce((pre,cur) => pre + cur, 0);
}
console.log(sum(1,2,3)); // 6

๋” ๋‚˜์€ ๋ฐฉ๋ฒ•์€ Rest ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค

// Rest ํŒŒ๋ผ๋ฏธํ„ฐ args๋Š” ํ•จ์ˆ˜์— ์ „๋‹ฌ๋œ ์ธ์ˆ˜๋“ค์˜ ๋ชฉ๋ก์„ ๋ฐฐ์—ด๋กœ ์ „๋‹ฌ๋ฐ›๋Š”๋‹ค.
const sum = (...args) => args.reduce((pre,cur) => pre + cur, 0);

console.log(sum(1,2,3)); // 6

์ดํ„ฐ๋Ÿฌ๋ธ”์ด ์•„๋‹Œ ์œ ์‚ฌ ๋ฐฐ์—ด ๊ฐ์ฒด๋Š” ์Šคํ”„๋ ˆ๋“œ ๋ฌธ๋ฒ•์˜ ๋Œ€์ƒ์ด ๋  ์ˆ˜ ์—†๋‹ค.

๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ โ“

Rest ํ”„๋กœํผํ‹ฐ์™€ ํ•จ๊ป˜ ์Šคํ”„๋ ˆ๋“œ ํ”„๋กœํผํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์˜ ํ”„๋กœํผํ‹ฐ ๋ชฉ๋ก์—์„œ๋„ ์Šคํ”„๋ ˆ๋“œ ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
์Šคํ”„๋ ˆ๋“œ ๋ฌธ๋ฒ•์˜ ๋Œ€์ƒ์€ ์ดํ„ฐ๋Ÿฌ๋ธ”์ด์–ด์•ผ ํ•˜์ง€๋งŒ ์Šคํ”„๋ ˆ๋“œ ํ”„๋กœํผํ‹ฐ ์ œ์•ˆ์€ ์ผ๋ฐ˜ ๊ฐ์ฒด๋ฅผ ๋Œ€์ƒ์œผ๋กœ๋„ ์Šคํ”„๋ ˆ๋“œ ๋ฌธ๋ฒ•์˜ ์‚ฌ์šฉ์„ ํ—ˆ์šฉ

// ์Šคํ”„๋ ˆ๋“œ ํ”„๋กœํผํ‹ฐ
// ๊ฐ์ฒด ๋ณต์‚ฌ(์–‡์€ ๋ณต์‚ฌ)
const obj = { x: 1, y: 2 };
const copy = { ...obj };
console.log(copy); // { x: 1, y: 2}
console.log(obj === copy); // false

// ๊ฐ์ฒด ๋ณ‘ํ•ฉ
const merged = { x: 1, y: 2, ...{a: 3, b: 4} };
console.log(merged); // { x: 1, y: 2, a: 3, b: 4}

์Šคํ”„๋ ˆ๋“œ ํ”„๋กœํผํ‹ฐ๊ฐ€ ์ œ์•ˆ๋˜๊ธฐ ์ด์ „์—๋Š” ES6์—์„œ ๋„์ž…๋œ Object.assign ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฐ์ฒด๋ฅผ ๋ณ‘ํ•ฉํ•˜๊ฑฐ๋‚˜ ํŠน์ • ํ”„๋กœํผํ‹ฐ๋ฅผ ๋ณ€๊ฒฝ ๋˜๋Š” ์ถ”๊ฐ€ํ–ˆ๋‹ค.

์Šคํ”„๋ ˆ๋“œ ํ”„๋กœํผํ‹ฐ๋Š” Object.assign ๋ฉ”์„œ๋“œ๋ฅผ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ„ํŽธํ•œ ๋ฌธ๋ฒ•!

profile
FrontEnd Developer

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