์์ ์๋ฃํ
, ์ฐธ์กฐ ์๋ฃํ
์ ์ข
๋ฅ์ ํน์ง์ ๋ํด ๋ฐฐ์ ์ผ๋ฉฐ ์์ ๋ณต์ฌ
์ ๊น์ ๋ณต์ฌ
๊ฐ ๋ฌด์์ธ์ง ํ์ตํ๋ค.
string
, number
, boolean
, undefined
, null
๊ณผ ๊ฐ์ ์๋ฃํlet a = 1;
let b = a;
b = 2;
console.log(a); //1
console.log(b); //2
์ฌ์ฉํ์ง ์๋ ๊ฐ์ ์๋์ผ๋ก ๋ฉ๋ชจ๋ฆฌ์์ ์ญ์ ํ๋ค.(์ด๋ ์์ ์์ ์ญ์ ๋๋์ง ์ ์ ์์)
array
, object
์ ๊ฐ์ ์๋ฃํlet a = {id: 1};
let b = a;
b.id = 2;
console.log(a.id); //2
console.log(b.id); //2
์์ธ ์ํฉ๋ ์๋ค.
ํ ๋น๋ ๋ณ์์ ๊ฐ์ฒด๋ฅผ ์์ฑํ ๊ฒฝ์ฐ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ๊ฐ์ง๊ฒ ๋์ด a
์ b
์ ๊ฐ์ ๋ค๋ฅด๋ค.
let a = {id: 1};
let b = a;
b = {id: 2}; // ๊ฐ์ฒด๋ฅผ ์์ฑ
console.log(a.id); //1
console.log(b.id); //2
์ฐธ์กฐ ์๋ฃํ์ ์ ์ฅํ๋ ํน๋ณํ ๊ณต๊ฐ
์ฃผ์ ๊ฐ์ด ์ ์ฅ๋์ด ์๊ณ , ๊ทธ ์ฃผ์ ๊ฐ์ ํตํด ์ฐธ์กฐ ์๋ฃํ์ ์ ๊ทผํ ์ ์๋ค.
์๋ณธ ์์ ์์ด ๊ทธ๋๋ก ๋ณต์ฌ
let arr = [1,2,3];
let copyArr = arr.slice();
copyArr.push(4);
console.log(arr); //1,2,3
console.log(copyArr); //1,2,3,4
๋ฐฐ์ด์ด ํ ๋น๋ ๋ณ์๋ช
์์ ...
์ ๋ถ์ด๋ฉด ๋๋ค.(ES6์์ ์๋กญ๊ฒ ์ถ๊ฐ๋ ๋ฌธ๋ฒ)
let arr = [1,2,3];
let copyArr = [...arr];
copyArr.push(4);
console.log(arr); //1,2,3
console.log(copyArr); //1,2,3,4
โ๏ธ ๋์ผํ ๊ฐ์ ํ ๋นํ ๊ฒฝ์ฐ
๊ฐ๊ฐ ๋ค๋ฅธ ์ฃผ์๋ฅผ ์ฐธ์กฐํ๊ธฐ ๋๋ฌธ์
false
๊ฐ ๋์จ๋ค.let a = [1,2,3]; let b = [1,2,3]; a === b // false
let obj = {a:1, b:2};
let copyObj = Object.assign({}, obj);
copyObj.c = 3;
console.log(obj); // {a: 1, b: 2}
console.log(copyObj); // {a: 1, b: 2, c: 3}
let obj = {a:1, b:2};
let copyObj = {...obj};
copyObj.c = 3;
console.log(obj); // {a: 1, b: 2}
console.log(copyObj); // {a: 1, b: 2, c: 3}
โ๏ธ ์ฐธ์กฐ ์๋ฃํ ๋ด๋ถ์ ์ฐธ์กฐ ์๋ฃํ์ด ์ค์ฒฉ๋์ด ์์ ๊ฒฝ์ฐ
slice
,Object.assign
,spread
์ฌ์ฉํด๋ ๋ณต์ฌํ ์ ์๋ค.
(์ฐธ์กฐ ์๋ฃํ์ ๋ช ๋จ๊ณ๋ก ์ค์ฒฉ๋์ด ์์ด๋ ํ ๋จ๊ณ๊น์ง๋ง ๋ณต์ฌํ๋ค.)let obj = { a: {id:1, value:2}, b: {id:3, value:4}, } // obj ๋ณต์ฌ // obj.a์ obj.b ๋ ๋์ผํ ์ฃผ์ ๊ฐ์ ์ฐธ์กฐํ๋ค.
์ฐธ์กฐ ์๋ฃํ์ ๋ฌธ์์ด ํํ๋ก ๋ณํ
๋ฌธ์์ด ํํ๋ฅผ ๊ฐ์ฒด๋ก ๋ณํ
const arr = [1,2,3,[4]]
const copyArr = JSON.parse(JSON.stringify(arr));
JSON.stringify()
์ฌ์ฉํด ๋ฌธ์์ด ํํ๋ก ๋ณํJSON.parse()
๋ฅผ ์ฌ์ฉํ๋ฉด ๊น์ ๋ณต์ฌ์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฌผ์ ๋ง๋ค ์ ์๋ค.โ๏ธ ์ค์ฒฉ๋ ์ฐธ์กฐ ์๋ฃํ์ ํจ์๊ฐ ํฌํจ๋์ด ์์ ๊ฒฝ์ฐ
JSON.stringify()
,JSON.parse()
๋ฅผ ์ด์ฉํ ๊ฒฝ์ฐ ํด๋น ํจ์๋null
์ด ๋์จ๋ค.โ๏ธ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ค.
node.js ํ๊ฒฝ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
lodash
,ramda
๋ฅผ ์ฌ์ฉํ๋ค.const ladash = require("lodash"); const obj = { a : 1, b : [1,2,3], c : function(){ console.log("Hi"); } } const copyObj = lodash.cloneDeep(obj);
string
, number
, boolean
, array
, objecy
๋ฑ ๊ฐ ํ์
์ ํน์ง์ ์๊ณ ์์์ง๋ง ์ด๋ฒ ํ์ต์ ํตํด ํด๋น ํ์
๋ค์ ์์/์ฐธ์กฐ ์๋ฃํ์ผ๋ก ๊ตฌ๋ถ๋์ง๋ ์๊ฒ ๋์๋ค.
๋ํ, ์์/์ฐธ์กฐ ์๋ฃํ
์ ํน์ง์ ๊ฐ์ด ์๊ฒ ๋์๊ณ ์ด๋ ํ ๊ฒฝ์ฐ๊ฐ ์์ ๋ณต์ฌ
์ธ์ง ๊น์ ๋ณต์ฌ
์ธ์ง, ์ด๋ค ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ผํ๋์ง ์๊ฒ ๋์๋ค.