# ์Šคํ”„๋ ˆ๋“œ ์˜คํผ๋ ˆ์ดํ„ฐ(Spread Operator)

์Šคํ”„๋ ˆ๋“œ ์˜คํผ๋ ˆ์ดํ„ฐ๋Š” ํ•œ๊ธ€๋กœ ๋ฒˆ์—ญํ•ด๋ณด๋ฉด ํŽผ์นจ ์—ฐ์‚ฐ์ž ์ •๋„๋กœ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์Šคํ”„๋ ˆ๋“œ ์˜คํผ๋ ˆ์ดํ„ฐ๋Š” ํŠน์ • ๊ฐ์ฒด ๋˜๋Š” ๋ฐฐ์—ด์˜ ๊ฐ’์„ ๋‹ค๋ฅธ ๊ฐ์ฒด, ๋ฐฐ์—ด๋กœ ๋ณต์ œํ•˜๊ฑฐ๋‚˜ ์˜ฎ๊ธธ ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์—ฐ์‚ฐ์ž์˜ ๋ชจ์–‘์€ ... ์ด๋ ‡๊ฒŒ ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค.

# ์Šคํ”„๋ ˆ๋“œ ์˜คํผ๋ ˆ์ดํ„ฐ ์‚ฌ์šฉ๋ฒ•

๋ฐ”๋กœ ํ•œ๋ฒˆ ์ฝ”๋“œ๋กœ ์‚ดํŽด๋ณผ๊นŒ์š”?

// obj ๊ฐ์ฒด๋ฅผ newObj ๊ฐ์ฒด์— ๋ณต์ œ
var obj = {
  a: 10,
  b: 20
};
var newObj = {...obj};
console.log(newOjb); // {a: 10, b: 20}

// arr ๋ฐฐ์—ด์„ newArr ๋ฐฐ์—ด์— ๋ณต์ œ
var arr = [1,2,3];
var newArr = [...arr];
console.log(newArr); // [1, 2, 3]

์œ„ ์ฝ”๋“œ๋“ค์€ ๋ชจ๋‘ ์Šคํ”„๋ ˆ๋“œ ์˜คํผ๋ ˆ์ดํ„ฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ํŠน์ • ๊ฐ์ฒด, ๋ฐฐ์—ด์˜ ๊ฐ’์„ ๊ฐ๊ฐ ์ƒˆ๋กœ์šด ๊ฐ์ฒด์™€ ๋ฐฐ์—ด์— ๋ณต์ œํ•˜๋Š” ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์Šคํ”„๋ ˆ๋“œ ์˜คํผ๋ ˆ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ผ๊นŒ์š”?

# ๊ธฐ์กด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๊ฐ์ฒด ๋ณต์ œ ๋ฐฉ์‹

์•ž์—์„œ ์‚ดํŽด๋ณธ ์ฝ”๋“œ์—์„œ ์Šคํ”„๋ ˆ๋“œ ์˜คํผ๋ ˆ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๊ธฐ์กด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฌธ๋ฒ•์œผ๋กœ๋งŒ ๊ตฌํ˜„ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

// ๊ฐ์ฒด์˜ ๊ฐ’์„ ๋ณต์‚ฌํ•˜๋Š” ๊ฒฝ์šฐ
var obj = {
  a: 10,
  b: 20
};
var newObj = {
  a: obj.a,
  b: obj.b
};
console.log(newObj); // {a: 10, b: 20}

// ๋ฐฐ์—ด์˜ ๊ฐ’์„ ๋ณต์‚ฌํ•˜๋Š” ๊ฒฝ์šฐ
var arr = [1,2,3];
var newArr = [arr[0], arr[1], arr[2]];
console.log(newArr); // [1, 2, 3]

๊ฐ์ฒด๋ฅผ ๋ณต์‚ฌํ•˜๋Š” ๊ฒฝ์šฐ, ์ƒˆ๋กœ์šด ๊ฐ์ฒด์ธ newObj์— ์ƒˆ๋กœ์šด ์†์„ฑ๋“ค์„ ์„ ์–ธํ•˜๊ณ  ๊ฐ ์†์„ฑ์— obj์˜ ์†์„ฑ๋“ค์„ ์ผ์ผ์ด ์ ‘๊ทผํ•ด์„œ ๋Œ€์ž…ํ•ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฐฐ์—ด newArr์˜ ๊ฒฝ์šฐ์—๋Š” ๊ธฐ์กด ๋ฐฐ์—ด arr์˜ ์ธ๋ฑ์Šค์— ์ผ์ผ์ด ์ ‘๊ทผํ•˜์—ฌ ์ƒˆ๋กœ์šด ์š”์†Œ๋ฅผ ๋งŒ๋“ค์–ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์œ„ ์ฝ”๋“œ์—์„œ ์‚ดํŽด๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด ์Šคํ”„๋ ˆ๋“œ ์˜คํผ๋ ˆ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ํƒ€์ดํ•‘ํ•ด์•ผ ํ•˜๋Š” ์ฝ”๋“œ์˜ ์–‘์ด ํ™•์—ฐํžˆ ์ค„์–ด๋“ญ๋‹ˆ๋‹ค.

# ๋ทฐ์—‘์Šค์— ์ ์šฉํ•ด๋ณธ ์Šคํ”„๋ ˆ๋“œ ์˜คํผ๋ ˆ์ดํ„ฐ

๋ทฐ์—์„œ ์Šคํ”„๋ ˆ๋“œ ์˜คํผ๋ ˆ์ดํ„ฐ๊ฐ€ ๊ฐ€์žฅ ์ž˜ ํ™œ์šฉ๋˜๋Š” ๋ถ€๋ถ„์€ ๋ทฐ์—‘์Šค(Vuex)์˜ ํ—ฌํผ ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ๋ทฐ์—‘์Šค์™€ ํ—ฌํผ ํ•จ์ˆ˜๊ฐ€ ์ต์ˆ™ํ•˜์ง€ ์•Š์€ ๋ถ„๋“ค์€ Vuex ์‹œ์ž‘ํ•˜๊ธฐ 2 (opens new window)๊ธ€์„ ์ฐธ๊ณ ํ•˜์„ธ์š”. ์–ด์ฐจํ”ผ ์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์€ ์Šคํ”„๋ ˆ๋“œ ์˜คํผ๋ ˆ์ดํ„ฐ๊ฐ€ ์–ด๋–ค ์‹์œผ๋กœ ๋ทฐ์—์„œ ํ™œ์šฉ๋˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿผ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

import { mapGetters } from 'vuex';

export default {
  computed: {
    ...mapGetters(['getStrings', 'getNumbers', 'getUsers']),
    anotherCounter() {
      // ..
    }
  }
}

์œ„ ์ฝ”๋“œ์—์„œ mapGetters๋ผ๋Š” ํ—ฌํผ ํ•จ์ˆ˜ ์•ž์— ์Šคํ”„๋ ˆ๋“œ ์˜คํผ๋ ˆ์ดํ„ฐ์ธ ...๋ฅผ ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ...๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด, computed ์†์„ฑ ํ•จ์ˆ˜์—๋Š” ๋ทฐ์—‘์Šค์˜ getters ์†์„ฑ ํ•จ์ˆ˜๋“ค๋งŒ ์ •์˜ํ•  ์ˆ˜ ์žˆ์—ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฌด์Šจ ๋ง์ธ์ง€ ์ดํ•ด๊ฐ€ ์•ˆ๊ฐ€์‹ ๋‹ค๊ตฌ์š”? ๊ทธ๋Ÿผ ์œ„์˜ ์ฝ”๋“œ์—์„œ ...๋ฅผ ๋” ํ’€์–ด๋ณผ๊ฒŒ์š”.

import { mapGetters } from 'vuex';

export default {
  computed: {
    getStrings() {
      // ..
    },
    getNumbers() {
      // ..
    },
    getUsers() {
      // ..
    },
    anotherCounter() {
      // ..
    }
  }
}

๋งŒ์•ฝ ...๋ฅผ ์“ฐ์ง€ ์•Š์•˜๋‹ค๋ฉด anotherCounter()๋ฅผ ์ถ”๊ฐ€๋กœ ์ •์˜ํ•  ์ˆ˜ ์—†์—ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ...๋กœ ํ’€์–ด์„œ ์œ„์™€ ๊ฐ™์ด ์‚ฝ์ž…์„ ํ•ด์คฌ๊ธฐ ๋•Œ๋ฌธ์— ์ถ”๊ฐ€๋กœ computed ์†์„ฑ ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.