λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Basics/Develop

[JS] ...props ? μž”μ—¬μ—°μ‚°μž(Rest Parameter)와 μ „κ°œκ΅¬λ¬Έ(Spread syntax)

by IworldT 2021. 9. 11.
λ°˜μ‘ν˜•

react둜 κ°œλ°œν•˜λ©΄μ„œ 맀우 자주 봀던 { ...props }와 같은 μž”μ—¬μ—°μ‚°μž ꡬ문!

React

점을 연이어 3개 μ‚¬μš©ν•˜λŠ” μž”μ—¬μ—°μ‚°μž(Rest Parameter)에 λŒ€ν•΄ μ•Œμ•„λ³΄λ‹€κ°€, λ˜‘κ°™μ΄ ...을 μ“°λŠ” μ „κ°œκ΅¬λ¬Έ(Spread syntax)에 λŒ€ν•΄μ„œλ„ 정리해보렀 ν•œλ‹€.

λ‘˜μ€ ꡬ문은 λ˜‘κ°™μ§€λ§Œ 역할은 거의 μ •λ°˜λŒ€λΌκ³  λ³Ό 수 μžˆλ‹€.

 

 

μž”μ—¬ μ—°μ‚°μž ( Rest Parameter )

λ‚΄κ°€ μ• μš©ν•˜λŠ” MDNμ—μ„œλŠ” μž”μ—¬ μ—°μ‚°μžλ₯Ό λ‹€μŒκ³Ό 같이 μ„€λͺ…ν•˜κ³  μžˆλ‹€. https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Functions/rest_parameters

ν•¨μˆ˜μ˜ λ§ˆμ§€λ§‰ νŒŒλΌλ―Έν„°μ˜ μ•žμ— ... λ₯Ό λΆ™μ—¬ (μ‚¬μš©μžκ°€ μ œκ³΅ν•œ) λͺ¨λ“  λ‚˜λ¨Έμ§€ 인수λ₯Ό "ν‘œμ€€" μžλ°”μŠ€ν¬λ¦½νŠΈ λ°°μ—΄λ‘œ λŒ€μ²΄ν•©λ‹ˆλ‹€. λ§ˆμ§€λ§‰ νŒŒλΌλ―Έν„°λ§Œ "Rest νŒŒλΌλ―Έν„°" κ°€ 될 수 μžˆμŠ΅λ‹ˆλ‹€.

 

그런데 λ³΄λ‹ˆκΉŒ, κΌ­ 배열이 μ•„λ‹ˆλ”λΌλ„ JSON 같은 ν˜•νƒœλŠ” Objectλ‘œλ„ λ°˜ν™˜ν•΄ μ£ΌλŠ” 것 κ°™λ‹€. μ˜ˆμ‹œλ‘œ ν™•μΈν•΄λ³΄μž.

 

μ˜ˆμ‹œ 1 - λ°°μ—΄λ‘œ λ°˜ν™˜

const random=[3,48,107]
const randomRest=[...random]

console.log("random",random);
console.log("randomRest",randomRest);

randomRest[0]=30;

console.log("random",random);
console.log("randomRest",randomRest);

 

 

μž”μ—¬ μ—°μ‚°μžλŠ” 값을 λ³΅μ‚¬ν•˜μ—¬ λ°˜ν™˜ν•΄μ£ΌλŠ” 것이기 λ•Œλ¬Έμ— μ›λž˜μ˜ random은 값이 λ³€ν•˜μ§€ μ•ŠμŒμ„ 확인할 수 μžˆλ‹€.

 

 

μ˜ˆμ‹œ 2 - Json 을 Object둜 λ°˜ν™˜

var address={
  country:"Korea",
  city:"Seoul",
  add1:"Gangnam-gu",
  add2:"Sinsa-dong 12",
  add3:"345 Street"
}

const {country, city, ...detail} = address

console.log("address", address);
console.log("detail", detail);

 

μ£Όμ†Œμ •λ³΄λ₯Ό λ‹΄κ³ μžˆλŠ” address 객체λ₯Ό country, city ν‚€λ‘œ λΆ„ν• ν•˜κ³ , λ‚˜λ¨Έμ§€ μž”μ—¬ 킀듀은 detailμ΄λΌλŠ” λ³„λ„μ˜ λ³€μˆ˜λ‘œ μ €μž₯ν•΄μ€€λ‹€. 

 

 

λ³΄λ‹€μ‹œν”Ό Json κ°μ²΄λŠ” κΌ­ 배열이 μ•„λ‹ˆλ”λΌλ„ detail을 Object둜 λ°˜ν™˜ν•΄μ£Όκ³  μžˆλŠ” 것을 λ³Ό 수 μžˆλ‹€.

이λ₯Ό μ‘μš©ν•΄μ„œ ν•¨μˆ˜μ™€ 데이터λ₯Ό μœ μš©ν•˜κ²Œ λ‹€λ£° 수 μžˆμ„ 것 κ°™λ‹€.

 

 

μ „κ°œκ΅¬λ¬Έ(Spread syntax)

MDNμ—μ„œμ˜ μ„€λͺ…은 λ‹€μŒκ³Ό κ°™λ‹€.

μ „κ°œ ꡬ문을 μ‚¬μš©ν•˜λ©΄ λ°°μ—΄μ΄λ‚˜ λ¬Έμžμ—΄κ³Ό 같이 반볡 κ°€λŠ₯ν•œ 문자λ₯Ό 0개 μ΄μƒμ˜ 인수 (ν•¨μˆ˜λ‘œ ν˜ΈμΆœν•  경우) λ˜λŠ” μš”μ†Œ (λ°°μ—΄ λ¦¬ν„°λŸ΄μ˜ 경우)둜 ν™•μž₯ν•˜μ—¬, 0개 μ΄μƒμ˜ ν‚€-κ°’μ˜ 쌍으둜 객체둜 ν™•μž₯μ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.

μš”μ†Œλ₯Ό λ°°μ—΄ λ˜λŠ” 객체둜 λ°˜ν™˜ν•΄μ£ΌλŠ” μž”μ—¬μ—°μ‚°μžμ™€ 달리, 배열을 μš”μ†Œλ‘œ ν’€μ–΄μ£ΌλŠ”(Spread) 역할을 ν•œλ‹€.

λ°˜μ‘ν˜•

 

μ˜ˆμ‹œ 1 - λ°°μ—΄μ—μ„œμ˜ Spread

3개의 μš”μ†Œκ°€ μžˆλŠ” 배열을 ν•˜λ‚˜μ”© ν•¨μˆ˜μ˜ νŒŒλΌλ―Έν„°λ‘œ λ„£μ–΄μ£Όκ³ μž ν•  λ•Œ μ‚¬μš©ν•  수 μžˆλ‹€. λ‹€μŒμ˜ μ½”λ“œλ₯Ό μ°Έκ³ ν•˜μž.

function sum(x, y, z) {
  return x + y + z;
}

const numbers = [1, 2, 3];

console.log(sum(...numbers));

console.log(sum.apply(null, numbers));

 

sum은 x,y,z μ„Έ 개의 νŒŒλΌλ―Έν„°λ₯Ό λ°›μ•„ ν•©ν•œ 값을 λ°˜ν™˜ν•΄μ£ΌλŠ” ν•¨μˆ˜μ΄λ‹€.

그리고 numbersλŠ” 1,2,3 μ„Έ 개의 μš”μ†Œλ₯Ό λ°°μ—΄λ‘œ 가지고 μžˆλŠ” ν•¨μˆ˜μ΄λ‹€. 이 μ„Έ 개의 값을 λ°”λ‘œ λ„£κ³ μ‹ΆμœΌλ©΄,

sum(numbers[0],numbers[1],numbers[2])와 같은 μ‘°κΈˆμ€ λΆ€μ‘±ν•œ μ½”λ“œλ‚˜,

.apply() ν•¨μˆ˜λ₯Ό μ΄μš©ν•΄μ•Ό ν•œλ‹€.

κ·Έλ ‡μ§€λ§Œ spread ꡬ문, ...numbersλ₯Ό μ΄μš©ν•˜λ©΄ μ‰½κ²Œ λ°°μ—΄ μš”μ†Œλ₯Ό ν’€μ–΄μ€„μˆ˜ μžˆλ‹€.

 

 

 

μ˜ˆμ‹œ 2 - λ¬Έμžμ—΄μ—μ„œ Spread ꡬ문

λ¬Έμžμ—΄ κ°„μ˜ 쑰합은 push(), slice(), concat()등을 μ΄μš©ν•΄μ•Ό ν•˜λ©° κ·Έ 값을 λ”°λ‘œ μ €μž₯ν•΄μ•Ό ν•˜λŠ” λ“± ν•¨μˆ˜μ™€ λ³€μˆ˜ μ‚¬μš©μ— λΆˆνŽΈν•¨μ΄ λ§Žμ•˜λ‹€. 이λ₯Ό Spread ꡬ문을 ν†΅ν•΄μ„œ κ°„κ²°ν•˜κ²Œ λ§Œλ“€ 수 μžˆλ‹€.

var parts = ['shoulders', 'knees'];
var lyrics = ['head', ...parts, 'and', 'toes'];

console.log(lyrics);

 

쀑간에 ν•©μΉ˜κΈ° μœ„ν•΄μ„œ μ‚¬μš©ν•΄μ•Όν–ˆλ˜ sliceλ‚˜ concat λ“±μ˜ ν•¨μˆ˜ 없이 κ°„λ‹¨ν•˜κ²Œ ν‘œν˜„μ΄ κ°€λŠ₯ν•˜λ‹€. 

 

JS, JavaScript, μžλ°”μŠ€ν¬λ¦½νŠΈ, μ „κ°œκ΅¬λ¬Έ, ... , μž”μ—¬μ—°μ‚°μž, Rest μ—°μ‚°μž, Rest Parameter , React , λ¦¬μ•‘νŠΈ , React Native , λ¦¬μ•‘νŠΈ λ„€μ΄ν‹°λΈŒ , ... syntax

728x90
λ°˜μ‘ν˜•

λŒ“κΈ€