07. spread 와 rest

07. spread 와 rest

μ΄λ²ˆμ—λŠ” ES6 μ—μ„œ λ„μž…λœ spread 와 rest 문법에 λŒ€ν•΄μ„œ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€. μ„œλ‘œ μ™„μ „νžˆ λ‹€λ₯Έ λ¬Έλ²•μΈλ°μš”, μ€κ·Όνžˆ μ’€ λΉ„μŠ·ν•©λ‹ˆλ‹€.

spread

일단 spread 문법뢀터 μ•Œμ•„λ΄…μ‹œλ‹€. spread λΌλŠ” 단어가 κ°€μ§€κ³  μžˆλŠ” μ˜λ―ΈλŠ” νŽΌμΉ˜λ‹€, νΌλœ¨λ¦¬λ‹€ μž…λ‹ˆλ‹€. 이 문법을 μ‚¬μš©ν•˜λ©΄, 객체 ν˜Ήμ€ 배열을 μ†μ‰½κ²Œ μ»¨νŠΈλ‘€ν• μˆ˜ μžˆμŠ΅λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄μ„œ λ‹€μŒκ³Ό 같은 객체듀이 μžˆλ‹€κ³  κ°€μ •ν•΄λ΄…μ‹œλ‹€.

const slime = {
  name: 'μŠ¬λΌμž„'
};

const cuteSlime = {
  name: 'μŠ¬λΌμž„',
  attribute: 'cute'
};

const purpleCuteSlime = {
  name: 'μŠ¬λΌμž„',
  attribute: 'cute',
  color: 'purple'
};

console.log(slime);
console.log(cuteSlime);
console.log(purpleCuteSlime);
// κ²°κ³Ό)
Object {name: 'μŠ¬λΌμž„'}
Object {name: 'μŠ¬λΌμž„', attribute: 'cute'}
Object {name: 'μŠ¬λΌμž„', attribute: 'cute', color: 'purple'}

이 μ½”λ“œμ—μ„œλŠ” λ¨Όμ € slime μ΄λΌλŠ” 객체λ₯Ό μ„ μ–Έν–ˆμŠ΅λ‹ˆλ‹€. 그리고 cuteSlime μ΄λΌλŠ” 객체λ₯Ό λ§Œλ“€μ—ˆλŠ”λ°μš”, 기쑴에 μ„ μ–Έν•œ slime 을 건듀이지 μ•Šκ³  μƒˆλ‘œμš΄ 객체λ₯Ό λ§Œλ“€μ–΄μ„œ slime 이 κ°€μ§€κ³  μžˆλŠ” 값을 κ·ΈλŒ€λ‘œ μ‚¬μš©ν•˜μ˜€μŠ΅λ‹ˆλ‹€.(즉 λ¨Όμ €μ„ μ–Έν•œ 객체λ₯Ό λ³΅μ‚¬ν•΄μ„œ κ°€μ Έμ˜¨κ²ƒ μž…λ‹ˆλ‹€.)

κ·Έ λ‹€μŒμ—λŠ” purpleCuteSlime μ΄λΌλŠ” 객체λ₯Ό λ§Œλ“€μ—ˆλŠ”λ°μš”, 이 κ°μ²΄λŠ” cuteSlime 이 κ°€μ§€κ³  μžˆλŠ” 속성을 κ·ΈλŒ€λ‘œ μ‚¬μš©ν•˜λ©΄μ„œ μΆ”κ°€μ μœΌλ‘œ color κ°€ μΆ”κ°€λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

μœ„ μ½”λ“œμ—μ„œμ˜ 핡심은, 기쑴의 것을 건듀이지 μ•Šκ³ , μƒˆλ‘œμš΄ 객체λ₯Ό λ§Œλ“ λ‹€λŠ” 것 μΈλ°μš”, μ΄λŸ¬ν•œ 상황에 μ‚¬μš© ν•  수 μžˆλŠ” μœ μš©ν•œ 문법이 spread μž…λ‹ˆλ‹€.

μ•„κΉŒ μ½”λ“œλŠ” spread 문법을 μ‚¬μš©ν•˜λ©΄ λ‹€μŒκ³Ό 같이 μž‘μ„± ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

const slime = {
  name: 'μŠ¬λΌμž„'
};

const cuteSlime = {
  ...slime,
  attribute: 'cute'
};

const purpleCuteSlime = {
  ...cuteSlime,
  color: 'purple'
};

console.log(slime);
console.log(cuteSlime);
console.log(purpleCuteSlime);
// κ²°κ³Ό)
{name: "μŠ¬λΌμž„"}
{name: "μŠ¬λΌμž„", attribute: "cute"}
{name: "μŠ¬λΌμž„", attribute: "cute", color: "purple"}

μ—¬κΈ°μ„œ μ‚¬μš©ν•œ ... λ¬Έμžκ°€ λ°”λ‘œ spread μ—°μ‚°μžμž…λ‹ˆλ‹€.

spread μ—°μ‚°μž λ°°μ—΄μ—μ„œλ„ μ‚¬μš© ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

const animals = ['개', '고양이', 'μ°Έμƒˆ'];
const anotherAnimals = [...animals, 'λΉ„λ‘˜κΈ°'];
console.log(animals);
console.log(anotherAnimals);
// κ²°κ³Ό)
['개','고양이','μ°Έμƒˆ']
['개','고양이','μ°Έμƒˆ', 'λΉ„λ‘˜κΈ°']

기쑴의 animals λŠ” κ±΄λ“œλ¦¬μ§€ μ•ŠμœΌλ©΄μ„œ, μƒˆλ‘œμš΄ anotherAnimals 배열에 animals κ°€ κ°€μ§€κ³  μžˆλŠ” λ‚΄μš©μ„ λͺ¨λ‘ μ§‘μ–΄λ„£κ³ , 'λΉ„λ‘˜κΈ°' λΌλŠ” ν•­λͺ©μ„ μΆ”κ°€μ μœΌλ‘œ λ„£μ—ˆμŠ΅λ‹ˆλ‹€.

λ°°μ—΄μ—μ„œ spread μ—°μ‚°μžλ₯Ό μ—¬λŸ¬λ²ˆ μ‚¬μš© ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

const numbers = [1, 2, 3, 4, 5];

const spreadNumbers = [...numbers, 1000, ...numbers];
console.log(spreadNumbers); // [1, 2, 3, 4, 5, 1000, 1, 2, 3, 4, 5]

rest

restλŠ” μƒκΉ€μƒˆλŠ” spread λž‘ λΉ„μŠ·ν•œλ°, 역할이 맀우 λ‹€λ¦…λ‹ˆλ‹€. restλŠ” 객체, λ°°μ—΄, 그리고 ν•¨μˆ˜μ˜ νŒŒλΌλ―Έν„°μ—μ„œ μ‚¬μš©μ΄ κ°€λŠ₯ν•©λ‹ˆλ‹€.

κ°μ²΄μ—μ„œμ˜ rest

μš°μ„  κ°μ²΄μ—μ„œμ˜ μ˜ˆμ‹œλ₯Ό μ•Œμ•„λ³ΌκΉŒμš”?

const purpleCuteSlime = {
  name: 'μŠ¬λΌμž„',
  attribute: 'cute',
  color: 'purple'
};

const { color, ...rest } = purpleCuteSlime;
console.log(color);
console.log(rest);
// κ²°κ³Ό)
purple
Object {name: 'μŠ¬λΌμž„', attribute: 'cute'}

rest μ•ˆμ— color 값을 μ œμ™Έν•œ 값이 λ“€μ–΄μžˆμŠ΅λ‹ˆλ‹€.

rest λŠ” 객체와 λ°°μ—΄μ—μ„œ μ‚¬μš© ν•  λ•ŒλŠ” μ΄λ ‡κ²Œ 비ꡬ쑰화 ν• λ‹Ή 문법과 ν•¨κ»˜ μ‚¬μš©λ©λ‹ˆλ‹€. 주둜 μ‚¬μš© ν• λ•ŒλŠ” μœ„μ™€ 같이 rest λΌλŠ” ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜κ²Œ λ˜λŠ”λ°μš”, μΆ”μΆœν•œ κ°’μ˜ 이름이 κΌ­ rest 일 ν•„μš”λŠ” μ—†μŠ΅λ‹ˆλ‹€.

const tion = (...νŒŒλΌλ―Έν„°λ“€) => {
     νŒŒλΌλ―Έν„°λ“€.forEach(element => {
        console.log(element)
    });
};

tion(1,2,3,4,5);
// κ²°κ³Ό)
1
2
3
4
5

Last updated

Was this helpful?