๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ—‚ WIL/๐Ÿ“ React

๐Ÿ’ก Spread Syntax๋ฅผ ์™œ ์‚ฌ์šฉํ• ๊นŒ..?

by nalong 2022. 8. 10.

 

๐Ÿ“… ๋ณธ ๊ธ€์€ 2022๋…„ 4์›” 15์ผ ๊ฐœ์ธ github์— ์ž‘์„ฑ๋œ ๊ธ€์ž…๋‹ˆ๋‹ค.

๐Ÿš€ Spread Syntax๋ฅผ ์™œ ์‚ฌ์šฉํ• ๊นŒ..?

๐Ÿ’ก ๋ฆฌ์•กํŠธ์—์„œ setState๋ฅผ ํ†ตํ•ด ์ƒํƒœ๊ฐ’์„ ์—…๋ฐ์ดํŠธ ์‹œํ‚ฌ๋•Œ ๋‚˜๋Š” ํ•ญ์ƒ ์ „๊ฐœ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค. 
์™œ? Spread Syntax๋ฅผ ์‚ฌ์šฉํ–ˆ๋ƒ๋ฉด, ๋‹ค๋“ค ์“ฐ๊ธธ๋ž˜...! ์กฐ๊ธˆ ๋” ๊ตฌ์ฒด์ ์œผ๋กœ ๋งํ•˜์ž๋ฉด, ์ฒ˜์Œ์œผ๋กœ ์ „๊ฐœ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ ๊ฒƒ์€ ์ฒ˜์Œ ๋ฆฌ์•กํŠธ๋กœ todoList๋ฅผ ๋งŒ๋“ค๋•Œ์ด๋‹ค! ์ถ”๊ฐ€ํ•œ ๋‚ด์šฉ์ด ์—…๋ฐ์ดํŠธ ๋˜๋„๋ก ๋งŒ๋“ค์–ด์•ผ ํ–ˆ๋Š”๋ฐ, ์—…๋ฐ์ดํŠธ๋Š” ๋˜์ง€๋งŒ! ๋ฌธ์ œ๋Š” ์—…๋ฐ์ดํŠธ๋œ ๊ฐ’ ์ด์™ธ์— ์ด์ „์— ์žˆ๋˜ ๋‚ด์šฉ์€ ์‚ญ์ œ๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ์—ˆ๋‹ค. ์ด๋•Œ ๊ตฌ๊ธ€์— ๊ฒ€์ƒ‰ํ•ด๋ณด๋‹ˆ, ๊ฑฐ์˜ ๋ชจ๋“  ์ฝ”๋“œ์—์„œ ์ „๊ฐœ์—ฐ์‚ฐ์ž๋กœ ์ด์ „ ๊ฐ’๋“ค์„ ์œ ์ง€์‹œํ‚ค๊ธธ๋ž˜, ๊ทธ๋ƒฅ ๋‚˜๋„ ๋”ฐ๋ผ์ผ๋‹ค...๐Ÿฅฒ ๊ทธ๋ ‡๊ฒŒ ๊ทธ๋ƒฅ ์•„๋ฌด๋Ÿฐ ์˜์‹ฌ์—†์ด ์“ฐ๋‹ค๊ฐ€, ์ตœ๊ทผ์— useContext ์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•˜๊ธฐ ์œ„ํ•ด ์ž๋ฃŒ๋ฅผ ์ฐพ์•„๋ณด๋˜ ์ค‘์— ๋ฒจ๋กœํผํŠธ๋‹˜์˜ ๋ชจ๋˜ ๋ฆฌ์•กํŠธ ์ž๋ฃŒ์—์„œ ๋ฐฐ์—ด ๋ถ€๋ถ„์ด ์žˆ๊ธธ๋ž˜, ๊ทธ๋ƒฅ ์•„๋ฌด ์ƒ๊ฐ์—†์ด ํด๋ฆญํ–ˆ๋‹ค๊ฐ€ ...๐Ÿ˜ฑ  ์ด์œ ๋ฅผ ์ƒ๊ฐํ•˜์ง€ ์•Š๊ณ  ์ฝ”๋“œ๋ฅผ ์“ด ๋‚˜๋ฅผ ๋ฐ˜์„ฑํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ๋‹ค๋ฅธ์‚ฌ๋žŒ์—๊ฒŒ ๋‚ด๊ฐ€ ์ด๋Ÿฐ ์‹์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ ์ด์œ ๋ฅผ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ณต๋ถ€ํ•˜์ž!!

1๏ธโƒฃ  Spread Operator ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ? ๋Œ€์ค‘์ ์ด๋ผ์„œ? ๋†‰!!๐Ÿ˜ก ๋ถˆ๋ณ€์„ฑ๋•Œ๋ฌธ์—!!

๋ถˆ๋ณ€์„ฑ๋•Œ๋ฌธ์ด๋ผ๋Š” ๋ฌธ์žฅ์„ ์ฝ์ž๋งˆ์ž ์•„์ฐ”ํ–ˆ๋‹ค. ๊ฐ‘์ž๊ธฐ ๋ฉด์ ‘์ด ์ƒ์ƒ๋˜์—ˆ๋‹ค..


๐Ÿ—ฃ ํ˜น์‹œ ๋ฆฌ์•กํŠธ์—์„œ state ๊ฐ’์ด ๋ฐฐ์—ด ํ˜น์€ ๊ฐ์ฒด์ผ๋•Œ ์–ด๋–ป๊ฒŒ ๊ฐ’์„ ์ถ”๊ฐ€ํ•˜๋‚˜์š”?
๐Ÿ˜„ ์ „๊ฐœ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
๐Ÿ—ฃ ์™œ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์•„์‹œ๋‚˜์š”?
๐Ÿ˜… ์ž˜ ๋ชจ๋ฆ…๋‹ˆ๋‹ค..
๐Ÿ—ฃ ์ด์œ ๋ฅผ ๋ชจ๋ฅด์ง€๋งŒ, ์ „๊ฐœ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์‹  ์ด์œ ๊ฐ€ ์žˆ๋‚˜์š”..?
๐Ÿคฆ‍โ™€๏ธ ์—†์Šต๋‹ˆ๋‹ค.....

 

๋‹ค์‹œ ํ•œ๋ฒˆ ๋А๋‚€๋‹ค.. ๋‹ค๋ฅธ์‚ฌ๋žŒ์—๊ฒŒ ๋‚ด๊ฐ€ ์ด๋Ÿฐ ์‹์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ ์ด์œ ๋ฅผ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ณต๋ถ€ํ•˜์ž!!

๊ทธ๋Ÿผ ์ผ๋‹จ ๋ถˆ๋ณ€์„ฑ์ด ๋ฌด์—‡์ธ์ง€๋ถ€ํ„ฐ ์•Œ์•„๋ณด์ž!

2๏ธโƒฃ  ๋ถˆ๋ณ€์„ฑ์ด๋ž€?

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

(์‚ฌ์‹ค ์ด ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„œ๋„ WIL์— ๊ณ„์† ์–ธ๊ธ‰์ด ๋˜์—ˆ๋Š”๋ฐ, JS์—์„œ ์–•์€ ๋ณต์‚ฌ, ๊นŠ์€ ๋ณต์‚ฌ ๊ทธ๋ฆฌ๊ณ  ๋ชจ๋˜์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ 6์žฅ ๋ฐ์ดํ„ฐ ํƒ€์ž…์—์„œ ์–ธ๊ธ‰์ด ๋˜์—ˆ๋‹ค. ํ•˜์ง€๋งŒ, ์ด๋งŒํผ ์ค‘์š”ํ–ˆ๋Š”์ง€๋Š” ๋ชฐ๋ž๋˜ ๊ฒƒ ๊ฐ™๋‹ค... ๊ทธ๋ƒฅ ๊ฐ์ฒด๋Š” ์›์‹œ๊ฐ’๋“ค๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ ๋ถˆ๋ณ€ํ•œ ๊ฐ’์ด์•„๋‹ˆ๋ผ ๋ณ€ํ•  ์ˆ˜ ์žˆ๊ตฌ๋‚˜! ๊ทธ๋ž˜์„œ ์–•์€ ๋ณต์‚ฌ์™€ ๊นŠ์€ ๋ณต์‚ฌ๋กœ ๋‚˜๋ˆ„์–ด์ง€๋Š” ๊ตฌ๋‚˜..! ์ •๋„๋กœ ์•Œ๊ณ  ์žˆ์—ˆ๋‹ค..๐Ÿ˜… ์ง€๊ธˆ ์‚ดํŽด๋ณด๋‹ˆ ๋ชจ๋˜JS ๋’ท๋ถ€๋ถ„์—์„œ ๊ฐ์ฒด์™€ ๋ถˆ๋ณ€์„ฑ์— ๋Œ€ํ•œ ๋‚ด์šฉ์ด ์žˆ๋‹ค! ๋‹ค์‹œ ํ•œ๋ฒˆ ๋ชจ๋˜ JS๋ฅผ ์™„๋…ํ•˜๊ฒ ๋‹ค๋Š” ๋‹ค์ง์„ ํ•ด๋ณธ๋‹ค...(์–ด์ฉŒ๋‹ค๋ณด๋‹ˆ ๊ธ€์ด ๋ฐ˜์„ฑ๋ฌธ์ด ๋˜์–ด๊ฐ€๋Š” ๋А๋‚Œ์ด๋‹ค..))

์•„๋ฌดํŠผ ๋‹ค์‹œ ๋Œ์•„์™€์„œ ๊ฐ์ฒด๋Š” ์ƒˆ๋กœ์šด ๊ฐ’์ด ๋งŒ๋“ค์–ด์ง€์ง€ ์•Š๊ณ  ์›๋ž˜ ์›๋ณธ์—์„œ ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
๋ฐฐ์—ด ๋˜ํ•œ ๊ฐ์ฒด์™€ ๋˜‘๊ฐ™๋‹ค!

3๏ธโƒฃ  ์›๋ณธ ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒƒ์ด ์ข‹์ง€ ์•Š์€๊ฑด๊ฐ€์š”..? ๋ถˆ๋ณ€์„ฑ์„ ์ง€ํ‚ค๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•œ๊ฐ€์š”...? ๐Ÿค”

์›๋ณธ ๊ฐ’์„ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•œ๊ฐ€..? ํ•˜๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค. ์™œ ๋ถˆ๋ณ€์„ฑ์„ ์ง€ํ‚ค๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•œ๊ฐ€!

โœ… ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ณ  ๊ฐ€๋…์„ฑ์ด ์ข‹์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ! ๋ผ๊ณ  ํ•œ๋‹ค..!!

์œ ์ง€๋ณด์ˆ˜๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ณ  ๊ฐ€๋…์„ฑ์ด ์ข‹์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์™œ ๋ถˆ๋ณ€์„ฑ์„ ์ง€ํ‚ค๋Š” ๊ฒƒ์ด ์ค‘์š”ํ• ๊นŒ..?

์˜ˆ๋ฅผ ๋“ค์–ด, ๋‚ด๊ฐ€ A๋งˆํŠธ์— ๋ฐ”๋‚˜๋‚˜๋ฅผ ์ฃผ๋ฌธํ–ˆ๋‹ค! ๊ทธ๋Ÿฐ๋ฐ, ๋ฐ”๋‚˜๋‚˜๋ฅผ ์ฃผ๋ฌธํ•˜๊ณ  ๋‚˜๋‹ˆ ์˜ค๋ Œ์ง€๋„ ๋จน๊ณ  ์‹ถ์–ด์ ธ์„œ ์˜ค๋ Œ์ง€๋ฅผ ์ถ”๊ฐ€๋กœ ์ฃผ๋ฌธํ–ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž. ์ด๋•Œ A๋งˆํŠธ์˜ ์‹œ์Šคํ…œ์€ ์ถ”๊ฐ€ ์˜์ˆ˜์ฆ์ด ๋ฐœ๊ธ‰๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ,๊ธฐ์กด ์˜์ˆ˜์ฆ์— ๊ทธ๋ƒฅ ๊ณ ๊ฐ์ด ์ถ”๊ฐ€์ฃผ๋ฌธํ•œ ๋ฌผํ’ˆ์ด ์ถ”๊ฐ€๋กœ ๊ธฐ์žฌ๋œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋‹ค. ์ฆ‰ ๋ฌด์—‡์„ ์ถ”๊ฐ€ ์ฃผ๋ฌธํ•œ๊ฑด์ง€ ๋”ฐ๋กœ ํ‘œ์‹œX. ๊ทธ๋Ÿฐ๋ฐ ๋‚˜์ค‘์— ๋‚ด๊ฐ€ ๊ฐ‘์ž๊ธฐ ๋ฐ”๋‚˜๋‚˜๋ฅผ ์ถ”๊ฐ€ ์ฃผ๋ฌธํ•œ๊ฑด์ง€? ์˜ค๋ Œ์ง€๋ฅผ ์ฃผ๋ฌธํ•œ๊ฒƒ์ธ์ง€? ๊ถ๊ธˆํ•ด์ ธ์„œ ๋งˆํŠธ์— ๋ฌธ์˜๋ฅผ ํ•ด๋ด๋„, ์˜์ˆ˜์ฆ์—๋Š” ์•„๋ฌด๋Ÿฐ ํ‘œ์‹œ์—†์ด ์˜ค๋ Œ์ง€์™€ ๋ฐ”๋‚˜๋‚˜๊ฐ€ ๊ธฐ์žฌ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๊ณ ๊ฐ์ด ๋ฌด์—‡์„ ์ถ”๊ฐ€๋กœ ์ฃผ๋ฌธํ•œ ๊ฒƒ์ธ์ง€ ๋งˆํŠธ์—์„œ๋Š” ์•Œ์ˆ˜๊ฐ€ ์—†๋‹ค! -> ๊ทธ๋Ÿผ A๋งˆํŠธ๋Š” ์–ด๋–ค ํ•ด๊ฒฐ์ฑ…์„ ์„ธ์›Œ์•ผ ํ• ๊นŒ..?

๊ธฐ์กด ์˜์ˆ˜์ฆ์—์„œ ํ’ˆ๋ชฉ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ, ์ถ”๊ฐ€ ์˜์ˆ˜์ฆ์„ ๋งŒ๋“ค๋ฉด๋œ๋‹ค! ๊ณ ๊ฐ์˜ ์ฃผ๋ฌธ๋‚ด์—ญ ํ๋ฆ„์ด ๋ณด์ด๋„๋ก..!!

๊ทธ๋ž˜์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ์ „๊ฐœ ์—ฐ์‚ฐ์ž!!

 

const obj = { a: 1, b: 2 }
const obj2 = { ...obj }

console.log(obj === obj2) // false

 

๋„ˆ๋ฌด ์žฅํ™ฉํ•˜๊ฒŒ ์ด์•ผ๊ธฐ๋ฅผ ํ•œ ๊ฒƒ๊ฐ™์€๋ฐ.. ๋ถˆ๋ณ€์„ฑ์ด ์ง€์ผœ์ง€์ง€ ์•Š์œผ๋ฉด ๊ฐ์ฒด ๋‚ด๋ถ€์˜ ๊ฐ’์ด ์ƒˆ๋กœ์›Œ์ ธ๋„ ๋ฐ”๋€๊ฒƒ์„ ๊ฐ์ง€ํ•˜์ง€ ๋ชปํ•œ๋‹ค. ๊ทธ๋ ‡๊ธฐ๋•Œ๋ฌธ์— ๋ถˆ๋ณ€์„ฑ์„ ์ง€ํ‚ค๊ธฐ ์œ„ํ•ด ์ „๊ฐœ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๋ผ๊ณ  ์ดํ•ดํ•˜๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค!

4๏ธโƒฃ immer

๊ทธ๋Ÿฐ๋ฐ ๋ฐฐ์—ด, ๊ฐ์ฒด์˜ ๊ตฌ์กฐ๊ฐ€ ๋งŽ์ด ๋ณต์žกํ•ด์ง„๋‹ค๋ฉด ์ „๊ฐœ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ, ๋ถˆ๋ณ€์„ฑ์„ ์œ ์ง€ํ•˜๋ฉด์„œ ์—…๋ฐ์ดํŠธ ํ•˜๋Š” ๊ฒƒ๋„ ๊นŒ๋‹ค๋กœ์›Œ์ง„๋‹ค๊ณ  ํ•œ๋‹ค...์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด ๋ถˆ๋ณ€์„ฑ์„ ์‰ฝ๊ฒŒ ์œ ์ง€ํ•˜๋„๋ก ๋„์™€์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์žˆ๋‹ค. immer ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ๋ฐฉ๋ฒ•์€ ์‚ฌ์‹ค ์ด๋ฏธ ๋งŽ์€ ์ž๋ฃŒ๊ฐ€ ์žˆ๊ธฐ๋•Œ๋ฌธ์—, ๋”ฐ๋กœ ์ •๋ฆฌํ•˜์ง€๋Š” ์•Š๊ฒ ๋‹ค! ( ๋งŒ์•ฝ ์‚ฌ์šฉํ•˜๋‹ค๊ฐ€ ๊ถ๊ธˆํ•œ ๋ถ€๋ถ„์ด ์ƒ๊ธฐ๋ฉด ์ •๋ฆฌํ•  ์˜ˆ์ •! )

 

๐Ÿ–‡ Reference

https://velog.io/@_seeul/React-React%EC%9D%98-state%EA%B0%80-%EB%B6%88%EB%B3%80%EC%84%B1%EC%9D%84-%EA%B0%80%EC%A0%B8%EC%95%BC%ED%95%98%EB%8A%94-%EC%9D%B4%EC%9C%A0