[๐Ÿ’ป ์ฝ”๋“œ์Šคํ…Œ์ด์ธ  FE 44๊ธฐ] ๋ถ€ํŠธ์บ ํ”„ - ์›์‹œ/์ฐธ์กฐ ์ž๋ฃŒํ˜•, ์–•์€/๊นŠ์€ ๋ณต์‚ฌ

JiEunยท2023๋…„ 3์›” 2์ผ
0
post-thumbnail

โœ”๏ธ ์‹œ์ž‘

์›์‹œ ์ž๋ฃŒํ˜•, ์ฐธ์กฐ ์ž๋ฃŒํ˜•์˜ ์ข…๋ฅ˜์™€ ํŠน์ง•์— ๋Œ€ํ•ด ๋ฐฐ์› ์œผ๋ฉฐ ์–•์€ ๋ณต์‚ฌ์™€ ๊นŠ์€ ๋ณต์‚ฌ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ํ•™์Šตํ–ˆ๋‹ค.


๐Ÿ“ ์›์‹œ ์ž๋ฃŒํ˜•(primitive date type)

  • string, number, boolean, undefined, null๊ณผ ๊ฐ™์€ ์ž๋ฃŒํ˜•
  • ์›์‹œ ๊ฐ’ ์ž์ฒด๋ฅผ ๋ณต์‚ฌ

ํŠน์ง•

  • ์›์‹œ ์ž๋ฃŒํ˜•์„ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•  ๊ฒฝ์šฐ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ๊ฐ’ ์ž์ฒด๊ฐ€ ์ €์žฅ(๋ณต์‚ฌ)๋œ๋‹ค.(๊ณ ์ •๋œ ์ €์žฅ ๊ณต๊ฐ„ ์ฐจ์ง€)
  • ์›์‹œ ์ž๋ฃŒํ˜•์€ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฐ’(immutable value), ํ•œ ๋ฒˆ ์ƒ์„ฑ๋œ ์›์ง€ ์ž๋ฃŒํ˜•์€ ์ฝ๊ธฐ ์ „์šฉ(read only) ๋ฐ์ดํ„ฐ์ด๋‹ค. (์‹ ๋ขฐ์„ฑ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ์š”์ธ)
let a = 1;
let b = a;
b = 2;

console.log(a); //1
console.log(b); //2

โœ”๏ธ ๊ฐ€๋น„์ง€ ์ฝœ๋ ‰ํ„ฐ(garbage collector)

์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฐ’์„ ์ž๋™์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์‚ญ์ œํ•œ๋‹ค.(์–ด๋Š ์‹œ์ ์—์„œ ์‚ญ์ œ ๋˜๋Š”์ง€ ์•Œ ์ˆ˜ ์—†์Œ)

๐Ÿ“ ์ฐธ์กฐ ์ž๋ฃŒํ˜• (referrence date type)

  • array, object์™€ ๊ฐ™์€ ์ž๋ฃŒํ˜•
  • ์ฃผ์†Œ ๊ฐ’์„ ๋ณต์‚ฌ

ํŠน์ง•

  • ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๊ธฐ์— ์ ํ•ฉํ•˜๋‹ค.
  • ์ฐธ์กฐ ๊ฐ’์„ ๊ฐ–๋Š” ๋ณ€์ˆ˜๋ฅผ ๋‹ค๋ฅธ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•  ๊ฒฝ์šฐ ์ฃผ์†Œ๊ฐ’์ด ๋ณต์‚ฌ๋œ๋‹ค.
  • ์ฐธ์กฐ ์ž๋ฃŒํ˜•์€ ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•œ ๊ฐ’(mutable value)
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

โœ”๏ธ ํž™(heep)

์ฐธ์กฐ ์ž๋ฃŒํ˜•์„ ์ €์žฅํ•˜๋Š” ํŠน๋ณ„ํ•œ ๊ณต๊ฐ„

โœ”๏ธ ์ฐธ์กฐํ•˜๋‹ค.(refer)

์ฃผ์†Œ ๊ฐ’์ด ์ €์žฅ๋˜์–ด ์žˆ๊ณ , ๊ทธ ์ฃผ์†Œ ๊ฐ’์„ ํ†ตํ•ด ์ฐธ์กฐ ์ž๋ฃŒํ˜•์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ“์–•์€ ๋ณต์‚ฌ(shallow copy)

๋ฐฐ์—ด ๋ณต์‚ฌ (slice(), spread)

โœ”๏ธ slice() ๋ฉ”์„œ๋“œ

์›๋ณธ ์ˆ˜์ • ์—†์ด ๊ทธ๋Œ€๋กœ ๋ณต์‚ฌ

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

โœ”๏ธ spread syntax (๋ฐฐ์—ด์„ ํŽผ์น˜๋‹ค)

๋ฐฐ์—ด์ด ํ• ๋‹น๋œ ๋ณ€์ˆ˜๋ช… ์•ž์— ...์„ ๋ถ™์ด๋ฉด ๋œ๋‹ค.(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

๊ฐ์ฒด ๋ณต์‚ฌ (Object.assign(), spread)

โœ”๏ธObject.assign() ๋ฉ”์„œ๋“œ

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}

โœ”๏ธspread syntax

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 ๋Š” ๋™์ผํ•œ ์ฃผ์†Œ ๊ฐ’์„ ์ฐธ์กฐํ•œ๋‹ค.

๐Ÿ“๊นŠ์€ ๋ณต์‚ฌ(deep copy)

JSON.stringify(), JSON.parse()

โœ”๏ธ JSON.stringify() ๋ฉ”์„œ๋“œ

์ฐธ์กฐ ์ž๋ฃŒํ˜•์„ ๋ฌธ์ž์—ด ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜

โœ”๏ธ JSON.parse() ๋ฉ”์„œ๋“œ

๋ฌธ์ž์—ด ํ˜•ํƒœ๋ฅผ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜

const arr = [1,2,3,[4]]
const copyArr = JSON.parse(JSON.stringify(arr));
  1. JSON.stringify() ์‚ฌ์šฉํ•ด ๋ฌธ์ž์—ด ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜
  2. ๋ณ€ํ™˜๋œ ๊ฐ’์— 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 ๋“ฑ ๊ฐ ํƒ€์ž…์˜ ํŠน์ง•์„ ์•Œ๊ณ  ์žˆ์—ˆ์ง€๋งŒ ์ด๋ฒˆ ํ•™์Šต์„ ํ†ตํ•ด ํ•ด๋‹น ํƒ€์ž…๋“ค์„ ์›์‹œ/์ฐธ์กฐ ์ž๋ฃŒํ˜•์œผ๋กœ ๊ตฌ๋ถ„๋˜์ง€๋Š” ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.

๋˜ํ•œ, ์›์‹œ/์ฐธ์กฐ ์ž๋ฃŒํ˜•์˜ ํŠน์ง•์„ ๊ฐ™์ด ์•Œ๊ฒŒ ๋˜์—ˆ๊ณ  ์–ด๋– ํ•œ ๊ฒฝ์šฐ๊ฐ€ ์–•์€ ๋ณต์‚ฌ์ธ์ง€ ๊นŠ์€ ๋ณต์‚ฌ์ธ์ง€, ์–ด๋–ค ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š”์ง€ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.

profile
๐Ÿ’ป ํ”„๋ก ํŠธ์—”๋“œ๋ฅผ ๋ชฉํ‘œ๋กœ ์„ฑ์žฅ ์ค‘! (์•Œ์•„๋ดค๋˜ ๋‚ด์šฉ ๋“ฑ์„ ์ •๋ฆฌํ•˜๊ธฐ)

0๊ฐœ์˜ ๋Œ“๊ธ€