๋ฆฌ์•กํŠธ์™€ ๋ถˆ๋ณ€์„ฑ

๋ฆฌ์•กํŠธ์—์„œ ๋ถˆ๋ณ€์„ฑ์„ ์ง€์ผœ์•ผ ํ•˜๋Š” ์ด์œ ๋Š”?

React์˜ ๋ฌธ์„œ๋ฅผ ์ฝ๋‹ค ๋ณด๋ฉด ๋ถˆ๋ณ€์„ฑ์„ ๊ฐ•์กฐํ•˜๋Š” ๋ถ€๋ถ„ ๋˜๋Š” State๋ฅผ ์ง์ ‘์ ์œผ๋กœ ๋ณ€๊ฒฝํ•˜์ง€ ๋ง๋ผ๋Š” ๋ง์„ ๋ณธ ์ ์ด ์žˆ์„ ๊ฒƒ์ด๋‹ค. ์™œ ๊ทธ๋Ÿฐ ๊ฑธ๊นŒ?

๋ฆฌ์•กํŠธ์—์„œ ์ƒํƒœ๋ฅผ ๋‹ค๋ฃฐ ๋•Œ๋Š” ๊ฐ์ฒด๊ฐ€ ์ง€๋‹Œ ๊ฐ’์„ ๋ฐ”๊พธ๊ณ  ์‹ถ๋‹ค๊ณ  ํ•ด์„œ ๊ฐ’์„ ์ง์ ‘ ์ˆ˜์ •ํ•˜๋ฉด ์•ˆ๋œ๋‹ค. ์•„๋ž˜์ฒ˜๋Ÿผ ๊ธฐ์กด ๊ฐ์ฒด๋Š” ๊ทธ๋Œ€๋กœ ๋‘๊ณ , ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด ์›ํ•˜๋Š” ๊ฐ’์„ ๋ฎ์–ด์”Œ์›Œ์•ผ ํ•œ๋‹ค.
const info={
id:1,
  name:'John'
}
      
const nextInfo={
  ...info,
  name: 'Jane'
}
๋ฆฌ์•กํŠธ๋Š” ์ปดํฌ๋„ŒํŠธ์— ๋ณ€ํ™”๊ฐ€ ํ•„์š”ํ•œ์ง€ ํ•„์š”ํ•˜์ง€ ์•Š์€์ง€ Props์˜ ๋ณ€ํ™” ํ†ตํ•ด ์•Œ ์ˆ˜ ์žˆ๋Š”๋ฐ ์ปดํฌ๋„ŒํŠธ์˜ ๋ Œ๋”๋ง ์„ฑ๋Šฅ์„ ์ตœ์ ํ™” ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ด์ „์— ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋“ค๊ณ  ์žˆ๋˜ Props์™€ ์ƒˆ๋กœ ๋ฐ›์•„์˜ฌ Props๋ฅผ ๋น„๊ตํ•˜๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•˜๋ฉฐ ๋ถˆ๋ณ€์„ฑ์„ ์œ ์ง€์‹œ์ผœ ์ฃผ์–ด์•ผ ํ•œ๋‹ค.

๐Ÿ“ ๋ถˆ๋ณ€์„ฑ์ด ์œ ์ง€๋˜์ง€ ์•Š์€ ๊ฐ™์€ ์ฐธ์กฐ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋Š” ๋ฐ์ดํ„ฐ

const data = { id:1, text:'์•ˆ๋…•ํ•˜์„ธ์š”'};
    
const sameData = data;
sameData.text = '์•ˆ๋…•ํ•˜์„ธ์š”';
      
console.log(sameData === data); // true
sameData์— ๊ธฐ์กด์˜ data๋ฅผ ๋Œ€์ž…ํ•˜๊ณ  text ๊ฐ’์„ ์ˆ˜์ • ํ–ˆ๋‹ค. ๋น„๋ก ์ƒˆ๋กœ์šด ์ด๋ฆ„์„ ์„ ์–ธ ํ•˜๊ธด ํ–ˆ์ง€๋งŒ sameData์™€ data๋Š” ๋˜‘๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋‹ค.

๋”ฐ๋ผ์„œ sameData.text ๊ฐ’์„ ๋ฐ”๊พธ๋ฉด ๋‹น์—ฐํžˆ data.text ๊ฐ’ ๋˜ํ•œ ๋ฐ”๋€Œ๊ฒŒ ๋œ๋‹ค. sameData์™€ data๋Š” ์™„์ „ํžˆ ์ผ์น˜ํ•˜๋Š” ๊ฐ์ฑ„์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ ๋น„๊ตํ•˜๋ฉด ๊ฒฐ๊ณผ๋Š” true ์ด๋‹ค.

๋ถˆ๋ณ€์„ฑ์„ ์œ ์ง€ํ•˜๋ฉด์„œ ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ฐฉ๋ฒ•

const data = { id:1, text:'์•ˆ๋…•ํ•˜์„ธ์š”'};
const nextData = { ...data, text: '์‚ฌ์š”๋‚˜๋ผ'};
      
console.log(nextData === data) // false
์œ„ ์ฝ”๋“œ๋Š” data ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐ๊ฐ€ ๋Š์–ด์ง„ ์ƒˆ๋กœ์šด ๊ฐ’์œผ๋กœ ์ƒ์„ฑ ํ•œ๋‹ค. ์ด๋ฒˆ์— ์„ ์–ธํ•œ nextData๋Š” ์™„์ „ํžˆ ์ƒˆ๋กœ์šด ๊ฐ์ฒด ์ด๋‹ค.

๋ฆฌ์•กํŠธ๋Š” ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•  ๋•Œ ์ด์ „ ์ƒํƒœ์™€ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ๋น„๊ตํ•˜์—ฌ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ถ€๋ชจ๋กœ ๋ถ€ํ„ฐ ๋‚ด๋ ค๋ฐ›๋Š” Props๋‚˜ ๋‚ด๋ถ€ ์ƒํƒœ์ธ State๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๋•Œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋‹ค์‹œ ๋ Œ๋”๋ง ํ•˜๋Š” ๋ฆฌ๋ Œ๋”๋ง ๊ณผ์ •์ด ์ผ์–ด๋‚œ๋‹ค.
๊ฐ์ฒด์˜ ์ฐธ์กฐ๋ฅผ ๋ณต์‚ฌํ•œ๋‹ค๋Š” ์ ์„ ์ด์šฉํ•ด ๋‹จ์ˆœํžˆ ์ฐธ์กฐ๋งŒ ๋น„๊ตํ•˜๋Š” ์–•์€ ๋น„๊ต๋ฅผ ์ด์šฉํ•ด์„œ ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚ฌ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์ฐธ์กฐ ํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ์ธ ๊ฒฝ์šฐ ๋ฉ”๋ชจ๋ฆฌ ํž™ ์˜์—ญ์— ์ €์žฅ์ด ๋˜์–ด ๋‚ด๋ถ€ ํ”„๋กœํผํ‹ฐ๋ฅผ ๋ณ€๊ฒฝํ•ด๋„ ๊ฐ™์€ ์ฐธ์กฐ๋ฅผ ๊ฐ–๊ณ  ์žˆ๋‹ค.

๋”ฐ๋ผ์„œ ๊ฐ์ฒด์˜ ํŠน์ • ํ”„๋กœํผํ‹ฐ๋งŒ ๋ณ€๊ฒฝํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋ฆฌ์•กํŠธ์—์„œ๋Š” ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚˜์ง€ ์•Š์•˜๋‹ค๊ณ  ์ธ์‹ํ•˜์—ฌ ๋ฆฌ๋ Œ๋”๋ง์ด ์ผ์–ด๋‚˜์ง€ ์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ ๋ฆฌ๋ Œ๋”๋ง์„ ์ผ์œผํ‚ค๋ ค๋ฉด ๋ฆฌ์•กํŠธ์— ์ด์ „์˜ ์ฐธ์กฐ์™€ ๋‹ค๋ฅธ ์ฐธ์กฐ๋กœ ๋ณ€๊ฒฝ๋˜์—ˆ์Œ์„ ์•Œ๋ ค์•ผ ํ•œ๋‹ค.

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