๋ฆฌ์กํธ์์ ๋ถ๋ณ์ฑ์ ์ง์ผ์ผ ํ๋ ์ด์ ๋?
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 ์ด๋ค.
๋ฐ๋ผ์ 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๊ฐ ๋ณ๊ฒฝ๋์์ ๋ ์ปดํฌ๋ํธ๋ฅผ ๋ค์ ๋ ๋๋ง ํ๋ ๋ฆฌ๋ ๋๋ง ๊ณผ์ ์ด ์ผ์ด๋๋ค.
๋ฆฌ์กํธ๋ ์ํ๊ฐ ๋ณ๊ฒฝ๋์๋์ง ์ฌ๋ถ๋ฅผ ํ๋จํ ๋ ์ด์ ์ํ์ ํ์ฌ ์ํ๋ฅผ ๋น๊ตํ์ฌ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ถ๋ชจ๋ก ๋ถํฐ ๋ด๋ ค๋ฐ๋ Props๋ ๋ด๋ถ ์ํ์ธ State๊ฐ ๋ณ๊ฒฝ๋์์ ๋ ์ปดํฌ๋ํธ๋ฅผ ๋ค์ ๋ ๋๋ง ํ๋ ๋ฆฌ๋ ๋๋ง ๊ณผ์ ์ด ์ผ์ด๋๋ค.
๊ฐ์ฒด์ ์ฐธ์กฐ๋ฅผ ๋ณต์ฌํ๋ค๋ ์ ์ ์ด์ฉํด ๋จ์ํ ์ฐธ์กฐ๋ง ๋น๊ตํ๋ ์์ ๋น๊ต๋ฅผ ์ด์ฉํด์ ๋ณ๊ฒฝ์ด ์ผ์ด๋ฌ๋์ง ํ์ธํ๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์์ ์ฐธ์กฐ ํ์ ์ ๋ฐ์ดํฐ์ธ ๊ฒฝ์ฐ ๋ฉ๋ชจ๋ฆฌ ํ ์์ญ์ ์ ์ฅ์ด ๋์ด ๋ด๋ถ ํ๋กํผํฐ๋ฅผ ๋ณ๊ฒฝํด๋ ๊ฐ์ ์ฐธ์กฐ๋ฅผ ๊ฐ๊ณ ์๋ค.
๋ฐ๋ผ์ ๊ฐ์ฒด์ ํน์ ํ๋กํผํฐ๋ง ๋ณ๊ฒฝํ๋ ์์ ์ ์ํํ๋ฉด ๋ฆฌ์กํธ์์๋ ๋ณ๊ฒฝ์ด ์ผ์ด๋์ง ์์๋ค๊ณ ์ธ์ํ์ฌ ๋ฆฌ๋ ๋๋ง์ด ์ผ์ด๋์ง ์๋๋ค. ๋ฐ๋ผ์ ๋ฆฌ๋ ๋๋ง์ ์ผ์ผํค๋ ค๋ฉด ๋ฆฌ์กํธ์ ์ด์ ์ ์ฐธ์กฐ์ ๋ค๋ฅธ ์ฐธ์กฐ๋ก ๋ณ๊ฒฝ๋์์์ ์๋ ค์ผ ํ๋ค.
์ํ๊ฐ ๋ณ๊ฒฝ๋์๋์ง๋ฅผ ์ ํํ๊ฒ ํ๋จํ๊ธฐ ์ํด์๋ ๋ถ๋ณ์ฑ์ ์ ์งํด์ผ ํ๋ฉฐ ๋ถ๋ณ์ฑ์ ์ ์งํ์ง ์์ผ๋ฉด ๋ฆฌ์กํธ๊ฐ ์ ๋๋ก ๋์ํ์ง ์๊ณ ์ฑ๋ฅ ์ต์ ํ๊ฐ ๋ฌด๋ ฅํ๋ ์ ์๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์์ ์ฐธ์กฐ ํ์ ์ ๋ฐ์ดํฐ์ธ ๊ฒฝ์ฐ ๋ฉ๋ชจ๋ฆฌ ํ ์์ญ์ ์ ์ฅ์ด ๋์ด ๋ด๋ถ ํ๋กํผํฐ๋ฅผ ๋ณ๊ฒฝํด๋ ๊ฐ์ ์ฐธ์กฐ๋ฅผ ๊ฐ๊ณ ์๋ค.
๋ฐ๋ผ์ ๊ฐ์ฒด์ ํน์ ํ๋กํผํฐ๋ง ๋ณ๊ฒฝํ๋ ์์ ์ ์ํํ๋ฉด ๋ฆฌ์กํธ์์๋ ๋ณ๊ฒฝ์ด ์ผ์ด๋์ง ์์๋ค๊ณ ์ธ์ํ์ฌ ๋ฆฌ๋ ๋๋ง์ด ์ผ์ด๋์ง ์๋๋ค. ๋ฐ๋ผ์ ๋ฆฌ๋ ๋๋ง์ ์ผ์ผํค๋ ค๋ฉด ๋ฆฌ์กํธ์ ์ด์ ์ ์ฐธ์กฐ์ ๋ค๋ฅธ ์ฐธ์กฐ๋ก ๋ณ๊ฒฝ๋์์์ ์๋ ค์ผ ํ๋ค.
์ํ๊ฐ ๋ณ๊ฒฝ๋์๋์ง๋ฅผ ์ ํํ๊ฒ ํ๋จํ๊ธฐ ์ํด์๋ ๋ถ๋ณ์ฑ์ ์ ์งํด์ผ ํ๋ฉฐ ๋ถ๋ณ์ฑ์ ์ ์งํ์ง ์์ผ๋ฉด ๋ฆฌ์กํธ๊ฐ ์ ๋๋ก ๋์ํ์ง ์๊ณ ์ฑ๋ฅ ์ต์ ํ๊ฐ ๋ฌด๋ ฅํ๋ ์ ์๋ค.