all is well!!

11. ์›์‹œ ํƒ€์ž…๊ณผ ๊ฐ์ฒด ํƒ€์ž…์˜ ์ฐจ์ด(์ฝœ์Šคํƒ๊ณผ ํž™) ๋ณธ๋ฌธ

Javascript ๊ณต๋ถ€

11. ์›์‹œ ํƒ€์ž…๊ณผ ๊ฐ์ฒด ํƒ€์ž…์˜ ์ฐจ์ด(์ฝœ์Šคํƒ๊ณผ ํž™)

tnqlscho 95 2023. 7. 13. 23:48

๐Ÿ‘€  ์›์‹œ ํƒ€์ž…๊ณผ ๊ฐ์ฒด ํƒ€์ž…์˜ ์ฐจ์ด

์›์‹œ ํƒ€์ž…์€ ๊ฐ’์„ ์ฝœ ์Šคํƒ์— ์ €์žฅ

๊ฐ์ฒด ํƒ€์ž…์€ ๊ฐ’์„ ํž™์— ์ €์žฅ

 

๊ฐ์ฒด ํƒ€์ž…์€ ์ฝœ์Šคํƒ์˜ value์— ๊ฐ์ฒด๊ฐ€ ์•„๋‹Œ ํž™์— ์ €์žฅ๋œ ๋ฉ”๋ชจ๋ฆฌ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•œ๋‹ค.


์ข€ ๋” ์‰ฝ๊ฒŒ ํ’€๊ธฐ (24.01 ์ถ”๊ฐ€)

 

๋น„ํŠธ(bit)๋Š” 0๊ณผ 1๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๊ณ  ๊ณ ์œ ์˜ ์‹๋ณ„์ž๋กœ ์œ„์น˜๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

์ข€๋” ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋น„ํŠธ๋ฅผ ์ ๋‹นํ•œ ๋ฌถ์Œ์œผ๋กœ ๊ด€๋ฆฌํ•œ๊ฒŒ ๋ฐ”์ดํŠธ(byte).

 

1๋ฐ”์ดํŠธ์—๋Š” 8๊ฐœ์˜ ๋น„ํŠธ๋กœ ๋ฌถ์—ฌ์žˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  1๋น„ํŠธ๋Š” 0,1 ๋‘๊ฐ€์ง€๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—

256๊ฐœ(2์˜ 8์Šน)๊ฐ’์„ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋ชจ๋“  ๋ฐ์ดํ„ฐ๋Š” ์ด๋ ‡๊ฒŒ ๋ฐ”์ดํŠธ ๋‹จ์œ„์˜ ์‹๋ณ„์ž์ธ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๊ฐ’์„ ํ†ตํ•ด์„œ ๊ตฌ๋ถ„ํ•˜๊ณ  ์—ฐ๊ฒฐํ•œ๋‹ค.

 

์›์‹œ ํƒ€์ž… : number, string, boolean, undefined, null, symbol

์ฐธ์กฐ ํƒ€์ž… : array, function, data, RegExp, Map, WeekMap, Set, WeekSet

 

๊ณตํ†ต์ :

๋‘ ํƒ€์ž… ๋‹ค ๋ณ€์ˆ˜์˜ ๊ฐ’์— ํ• ๋‹นํ•œ ๊ฐ’์ด ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ ๊ณต๊ฐ„์˜ ์ฃผ์†Œ๊ฐ’์„ ๋ณต์ œํ•œ๋‹ค.

 

๋‹ค๋ฅธ์ :

์›์‹œ ํƒ€์ž…์€ ํ• ๋‹น๋œ ๊ฐ’์ด ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ ๊ณต๊ฐ„์˜ ์ฃผ์†Œ๊ฐ’์„ ๋ฐ”๋กœ ๋ณต์ œํ•˜๋Š” ๊ฒƒ์ด๊ณ ,

์ฐธ์กฐ ํƒ€์ž…์€ ํ• ๋‹น๋œ ํ”„๋กœํผํ‹ฐ ๊ฐ’๋“ค์ด ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ ๊ณต๊ฐ„์˜ ์ฃผ์†Œ๊ฐ’๋“ค์„ ๋ฌถ์Œ์„ ๋ฐ”๋ผ๋ณด๋Š” ์ฃผ์†Œ๊ฐ’์„ ๋ณต์ œํ•˜๋Š” ๊ฒƒ.


๐Ÿ‘€  ์›์‹œ ํƒ€์ž…๊ณผ ๊ฐ์ฒด ํƒ€์ž…์˜ ์ฐจ์ด ์˜ˆ์‹œ - ๋ถˆ๋ณ€๊ฐ’๊ณผ ๊ฐ€๋ณ€๊ฐ’

let age = 35;
let oldAge = age;
age = 36;

console.log(age); //35
console.log(oldAge); //36

const me = {
	name : ‘Kyle’,
	age : 35
};

const friend = me;
friend.age = 33;

console.log(friend); //{ name : ‘Kyle’, age : 33 }
console.log(me); //{ name : ‘Kyle’, age : 33 }

Age์™€ oldAge๋ฅผ ์›์‹œํƒ€์ž… Number๋กœ ํ• ๋‹น์„ ํ–ˆ๋‹ค๋ฉด, ๊ทธ๋ฆฌ๊ณ  ๊ฐ™์€ ์ˆซ์ž 35๋ฅผ ํ• ๋‹น์„ ํ–ˆ๋‹ค๋ฉด!

์ด๋ฏธ ๋ณ€์ˆ˜ age์—์„œ 35๊ฐ€ ๋ณ„๋„ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ์ €์žฅ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ ๊ฐ’์„ ์žฌํ™œ์šฉํ•ด์„œ

oldAge์— age์™€ ๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ์ฃผ์†Œ๋ฅผ ๋ณ€์ˆ˜๊ฐ’์œผ๋กœ ์ €์žฅํ•œ๋‹ค.

๊ทธ๋ž˜์„œ ๋‘ ๋ณ€์ˆ˜ ์ „๋ถ€ ๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง€๊ณ ์žˆ๋‹ค.

๊ทธ๋ž˜์„œ ๊ทธ ๋ฉ”๋ชจ๋ฆฌ์•ˆ์— ๋“ค์–ด์žˆ๋Š” value35๊ฐ€ ์ฐํžŒ๋‹ค.

 

๋งŒ์•ฝ ์ด๋•Œ age์˜ value๋ฅผ 36์œผ๋กœ ๋ณ€๊ฒฝํ•˜๊ฒŒ ๋˜๋ฉด

๋ณ„๋„์˜ ๋ฐ์ดํ„ฐ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— 36์˜ ๊ฐ’์ด ์—†๊ธฐ๋•Œ๋ฌธ์— 0002์˜ ๊ณต๊ฐ„์„ ๋งŒ๋“ค์–ด์„œ 36์„ ์ €์žฅํ•œ๋‹ค.

๊ทธ๋ž˜์„œ ๋ณ€์ˆ˜ age๊ฐ’์— ์ƒˆ๋กœ์šด ๋ฉ”๋ชจ๋ฆฌ์ฃผ์†Œ 0002๋ฅผ ํ• ๋‹นํ•œ๋‹ค.

์ด๋•Œ๋Š” ๊ฐ’์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋กœ ๋‹ค๋ฅธ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๋ฐ”๋ผ๋ณด๊ณ  ์žˆ๋‹ค๋Š”๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋”ฐ๋ผ์„œ ๋ณ€์ˆ˜์˜ ํ• ๋‹น๊ฐ’์„ ๋ณ€๊ฒฝํ–ˆ์„๋•Œ ๊ธฐ์กด์— ๋ฐ”๋ผ๋ณด๊ณ  ์žˆ๋˜ ์ฃผ์†Œ์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋Š”๊ฒŒ ์•„๋‹Œ

๋ฐ์ดํ„ฐ ๊ณต๊ฐ„์— ๋ณ€๊ฒฝํ•œ ๊ฐ’์ด ์žˆ๋Š”์ง€ ์ฐพ์€ ํ›„ ์žˆ์œผ๋ฉด ๊ทธ ์ฃผ์†Œ๊ฐ’์œผ๋กœ ๋ณ€์ˆ˜์˜ ๊ฐ’์— ์ €์žฅํ•˜๊ณ 

์—†์œผ๋ฉด ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ๊ณต๊ฐ„์— ํ• ๋‹น๊ฐ’์„ ์ €์žฅํ•˜๊ณ  ๊ทธ ์ฃผ์†Œ๊ฐ’์„ ๋ณ€์ˆ˜์˜ ๊ฐ’์— ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ

์— ๋ถˆ๋ณ€์„ฑ์„ ๊ฐ–๋Š”๋‹ค๊ณ  ํ•œ๋‹ค.

์ด๋ ‡๊ฒŒ ์›์‹œ ํƒ€์ž…์€ ๋ถˆ๋ณ€์„ฑ์„ ๊ฐ–๋Š”๋‹ค!

 

๊ฐ์ฒด ํƒ€์ž…์œผ๋กœ ์„ ์–ธํ•˜๋ฉด ์›์‹œํ˜•๊ณผ๋Š” ์กฐ๊ธˆ ๋‹ค๋ฅด๋‹ค.

 

๊ฐ์ฒด์˜ ๋ณ€์ˆ˜(ํ”„๋กœํผํ‹ฐ) ์˜์—ญ์ด ๋”ฐ๋กœ ์กด์žฌํ•œ๋‹ค.

 

me๋ผ๋Š” ๋ณ€์ˆ˜์— name,age ํ•ญ๋ชฉ์ด ๋‹ด๊ธด ๊ฐ์ฒด๋ฅผ ์„ ์–ธํ•ด์„œ ์ €์žฅ์„ ํ•ด์ฃผ๋Š”๋ฐ

์ฝœ์Šคํƒ์˜ value์—๋Š” ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ํž™์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๊ฐ์ฒด์˜ ์ฃผ์†Œ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค.

(๋ณดํ†ต ๊ฐ์ฒด๋“ค์€ ํž™์— ์ €์žฅ์„ ํ•œ๋‹ค.)

๊ทธ๋ฆฌ๊ณ  ๊ทธ ์ฃผ์†Œ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์ฃผ์†Œ์— ์—ฐ๊ฒฐ์‹œ์ผœ์„œ ์ฝœ์Šคํƒ์—์„œ๋Š” ํž™์˜ ํ•ด๋‹น ๊ฐ์ฒด์ฃผ์†Œ๋ฅผ ๋ฐ”๋ผ๋ณด๋Š”๊ฒƒ.

๋งŒ์•ฝ์— me๊ฐ์ฒด์˜ age๊ฐ’์„ 33์œผ๋กœ ๋ฐ”๊พธ๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?

me์˜ age๊ฐ’๋งŒ 33์œผ๋กœ ๋ณ€๊ฒฝํ•ด๋„ me์™€ friend ์ „๋ถ€ ๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๋ฐ”๋ผ๋ณด๊ณ 

์žˆ๊ธฐ๋•Œ๋ฌธ์— ๋‘ ๋ณ€์ˆ˜์˜ ๊ฐ์ฒด ๋ชจ๋‘ age๊ฐ’์ด 33์œผ๋กœ ๋ณ€ํ•˜๊ฒŒ๋œ๋‹ค.

์ด๊ฒƒ์ด ๋ฐ”๋กœ ๊ฐ์ฒด์˜ ์–•์€ ๋ณต์‚ฌ!

 

์œ„์˜ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ์–•์€ ๋ณต์‚ฌ(Shallow Copy)๋ž€ ๊ฐ์ฒด๋ฅผ ๋ณต์‚ฌํ•  ๋•Œ

์›๋ณธ ๊ฐ’๊ณผ ๋ณต์‚ฌ๋œ ๊ฐ’์ด ๊ฐ™์€ ์ฐธ์กฐ(=๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ)๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฒƒ์ด๋‹ค.

์–•์€ ๋ณต์‚ฌ์˜ ์ฃผ์˜ํ•  ์ ์€ ์›๋ณธ์˜ ๋ถˆ๋ณ€์„ฑ์„ ์ง€์ผœ์ค˜์•ผ ๋œ๋‹ค๋Š”๊ฒƒ!!(์ค‘์š”)

๋ถˆ๋ณ€์„ฑ์„ ์ง€์ผœ์ฃผ์ง€ ๋ชปํ•˜๋ฉด  ๋‹ค๋ฅธ ์ˆœ์ˆ˜ ํ•จ์ˆ˜์—๋„ ์˜ํ–ฅ์„ ๋ฏธ์นœ๋‹ค.

 

๋ฐ˜๋Œ€๋กœ ๊ฐ์ฒด์˜ ๊นŠ์€ ๋ณต์‚ฌ๋Š” ์ƒˆ๋กœ์šด ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํ™•๋ณดํ•ด ์™„์ „ํžˆ ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

๊ทธ๋ž˜์„œ ๋ณต์‚ฌํ•œ ๊ฐ์ฒด์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด๋„ ์›๋ณธ๊ณผ๋Š” ๋‹ค๋ฅธ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ๋ฐ”๋ผ๋ณด๊ณ  ์žˆ๊ธฐ๋•Œ๋ฌธ์—

์›๋ณธ๊ฐ์ฒด๋Š” ๋ฐ”๋€Œ์ง€ ์•Š๋Š”๋‹ค.

 

๊ฐ์ฒด์˜ ์–•์€ ๋ณต์‚ฌ๋Š” Object.assign()์„ ์‚ฌ์šฉํ•˜๊ณ 

๊ฐ์ฒด์˜ ๊นŠ์€ ๋ณต์‚ฌ๋Š” lodash JS๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ clonedeep์„ ์‚ฌ์šฉํ•˜๋Š”๊ฒƒ๋„ ๋ฐฉ๋ฒ•์ค‘ ํ•˜๋‚˜!

 

 

 

Comments