[JS] ์ฐธ์กฐ์ ์ํ ์ ๋ฌ - ๊น์ ๋ณต์ฌ์ ์์ ๋ณต์ฌ
์ฌ๋ฌ๊ฐ์ ์๋ณ์๊ฐ ํ๋์ ๊ฐ์ฒด๋ฅผ ๊ณต์ ํ ์ ์๋ค๋ ๊ฒ์ด ๋ฌด์์ ์๋ฏธํ ๊น?
let obj = {
name: 'Park'
};
let obj2 = obj; // ์์ ๋ณต์ฌ
obj2.name = 'Lee';
console.log(obj); // name = 'Lee'
console.log(obj2); // name = 'Lee'
obj2 ๊ฐ์ ๊ฒฝ์ฐ์๋ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ ๋ณ์๋ฅผ ๋ค๋ฅธ ๋ณ์์ ํ ๋นํ๋ฉด ์๋ณธ์ ์ฐธ์กฐ ๊ฐ์ด ๋ณต์ฌ๋์ด ์ ๋ฌ๋๋ค. ์ด๋ฅผ ์ฐธ์กฐ์ ์ํ ์ ๋ฌ์ด๋ผ ํ๋ค.
์ด ๋ง์ ์๋กญ๊ฒ {name = 'Park'} ๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ง๋ค์ง ์๊ณ ๋ ๊ฐ์ ์๋ณ์๊ฐ ํ๋์ ๊ฐ์ฒด๋ฅผ ๊ณต์ ํ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
์ฆ obj์ obj2๋ ๋ชจ๋ ๋์ผํ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฅดํค๊ณ , ์๋ณธ ๋๋ ์ฌ๋ณธ ์ด๋ ํ์ชฝ์์ ๊ฐ์ฒด๋ฅผ ๋ณ๊ฒฝํ๋ฉด ์๋ก ์ํฅ์ ์ฃผ๊ณ ๋ฐ๋๋ค.
let obj = {
name: 'Park'
};
let obj2 = {...obj}; // ๊น์ ๋ณต์ฌ
obj2.name = 'Lee';
console.log(obj); // name = 'Park'
console.log(obj2); // name = 'Lee'
๋ฐ๋ฉด ๊น๊ฒ ๋ณต์ฌํ obj3์ ๊ฒฝ์ฐ์ ์๋ณธ์ ์ฐธ์กฐ ๊ฐ์ด ๋ณต์ฌ๋์ด ์ ๋ฌ๋์ง ์๋๋ค. ์ด๋ ํ ์ชฝ์์ ๊ฐ์ฒด๋ฅผ ๋ณ๊ฒฝ(ํ๋กํผํฐ ๊ฐ ๋ณ๊ฒฝ, ์ถ๊ฐ, ์ญ์ )๋ฑ)์ ํด๋ ์๋ก ์ํฅ์ ๋ฐ์ง ์๋๋ค. ๊ฐ์ฒด ๋ฆฌํฐ๋ด์ ํ๊ฐ๋ ๋๋ง๋ค ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ธฐ ๋๋ฌธ์ ๋ด์ฉ์ด ๊ฐ์ ๊ฐ์ฒด์ฌ๋ ๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋ ๋ณ๊ฐ์ ๊ฐ์ฒด์ด๋ค. ๊ทธ๋ฌ๋ ํ๋กํผํฐ ๊ฐ์ ๋์ผํ๋ฉด ๊ฐ์ ์์๊ฐ์ผ๋ก ํ๊ฐ๋๋ค.
์๋ก์ด ๊ฐ์ฒด์ ๋ณ์๋ฅผ ํ ๋นํ ๋ ์ํฅ์ ๊ฐ์ด ๋ฐ์์ผํ๋ค๋ฉด ์์ ๋ณต์ฌ๋ฅผ, ์๋ก ์ํฅ์ ๋ฐ์ผ๋ฉด ์๋๋ ์ํฉ์ด๋ฉด ๊น์ ๋ณต์ฌ๋ฅผ ์ฌ์ฉํด
์์ํ์ง ๋ชปํ ์ค๋ฅ๋ฅผ ํผํ์.