# ๐Ÿ—‚๏ธ Javascript Data Type

# ๐Ÿง‘๐Ÿผโ€๐Ÿš€ Javascript Data Type์„ ์•Œ์•„์•ผ ํ•˜๋Š” ์ด์œ 

โ—ํ”„๋ก ํŠธ์—”๋“œ์—์„œ ๋ถˆ๋ณ€์„ฑ์ด๋ผ๋Š” ๋ง์ด ๋‚˜์˜ฌ ๋•Œ ํ—ท๊ฐˆ๋ฆฐ๋‹ค๋ฉด? โ—๋ณต์‚ฌํ•œ ๊ฐ์ฒด์˜ ์†์„ฑ์„ ๋ณ€๊ฒฝํ–ˆ๋Š”๋ฐ ์›๋ณธ ๊ฐ์ฒด๋„ ๋ณ€๊ฒฝ๋œ๊ฑธ ๋ณธ์ ์ด ์žˆ๋‹ค๋ฉด?

# ๐Ÿ™‹๐Ÿปโ€โ™‚๏ธ ์ด ๋ฌธ์„œ๋ฅผ ๋ณด๊ณ  ๋‚˜๋ฉด

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ํ•„์š”ํ•œ ์ด์œ ๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
  • ๊ธฐ๋ณธํ˜• ํƒ€์ž…๊ณผ ์ฐธ์กฐํ˜• ํƒ€์ž…์ด ์„œ๋กœ ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘ํ•˜๋Š” ์ด์œ ๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๊ฐ์ฒด์˜ ๋ถˆ๋ณ€์„ฑ์„ ๋ณด์žฅํ•˜๋ฉด์„œ ๋ณ€๊ฒฝ์„ ๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๋ณต์‚ฌํ•  ์ˆ˜ ์žˆ๋‹ค.

# ๐Ÿ—‚๏ธ Javascript Data Type

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋ชจ๋“  ๊ฐ’์€ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ๊ฐ–์Šต๋‹ˆ๋‹ค. ํฌ๊ฒŒ 2๊ฐ€์ง€๋กœ ๊ธฐ๋ณธํ˜•(Primitive Type)๊ณผ ์ฐธ์กฐํ˜•(Reference Type)์ด ์žˆ์Šต๋‹ˆ๋‹ค.

image.png

์œ„์ฒ˜๋Ÿผ ๊ธฐ๋ณธํ˜•๊ณผ ์ฐธ์กฐํ˜•์œผ๋กœ ๊ตฌ๋ถ„ํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ผ๊นŒ์š”? ๊ตฌ๋ถ„ํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๊ทผ๋ณธ์ ์œผ๋กœ ๋‹ค๋ฅธ์ ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

# Primitive Type(์›์‹œ ๊ฐ’)

์›์‹œ ๊ฐ’์€ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฐ’์ž…๋‹ˆ๋‹ค. ์ฆ‰, ํ•œ๋ฒˆ ์ƒ์„ฑ๋œ ์›์‹œ ๊ฐ’์€ ์ฝ๊ธฐ ์ „์šฉ์ธ ๊ฐ’์œผ๋กœ์จ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์›์‹œ๊ฐ’์€ ๋ถˆ๋ณ€์„ฑ(immutability)๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ์‚ฌ์‹ค ์ด ๋ถ€๋ถ„์ด ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ๋Š”๋ฐ์š”. ์˜ˆ๋ฅผ ๋“ค์–ด ์•„๋ž˜์™€ ๊ฐ™์ด ๋ณ€์ˆ˜์— ์ƒˆ๋กœ์šด ๊ฐ’์„ ํ• ๋‹นํ•˜๋ฉด age๋Š” ์ •์ƒ์ ์œผ๋กœ 20์œผ๋กœ ๊ฐ’์ด ์ž˜ ๋ณ€๊ฒฝ์ด ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ๋ฌด์—‡์ด ๋ถˆ๋ณ€์„ฑ(immutability)๋ฅผ ๊ฐ€์ง„๋‹ค๋Š” ๊ฒƒ์ผ๊นŒ์š”?

var age = 30
age = 20

๋จผ์ € ๋ณ€์ˆ˜์™€ ๊ฐ’์„ ๊ตฌ๋ถ„ํ•ด์„œ ์ƒ๊ฐํ•ด์•ผํ•˜๋Š”๋ฐ์š”. ๋ณ€์ˆ˜๋Š” ํ•˜๋‚˜์˜ ๊ฐ’์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ํ™•๋ณด๋œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ ์ž์ฒด ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด ๋ถ™์ธ ์ด๋ฆ„์ด๊ณ , ๊ฐ’์€ ๋ณ€์ˆ˜์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์›์‹œ ๊ฐ’์€ ๋ถˆ๋ณ€์„ฑ์„ ๊ฐ€์ง„๋‹ค๋ผ๋Š” ๋ง์€ ์›์‹œ ๊ฐ’ ์ž์ฒด๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ด์ง€, ๋ณ€์ˆ˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋ณ€์ˆ˜๋Š” ์–ธ์ œ๋“ ์ง€ ์žฌํ• ๋‹น์„ ํ†ตํ•ด ๋ณ€์ˆ˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋ณ€(ํ• ์ˆ˜ ์žˆ๋Š”)์ˆ˜์ธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋ณ€์ˆ˜์— ์ƒˆ๋กœ์šด ๊ฐ’์„ ํ• ๋‹นํ•˜๋ฉด, ์›์‹œ๊ฐ’์€ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€์ˆ˜๊ฐ€ ์ฐธ์กฐํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์˜ ์ฃผ์†Œ๊ฐ€ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํŠน์„ฑ์„ ๋ถˆ๋ณ€์„ฑ(immutability) ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋ถˆ๋ณ€์„ฑ์„ ๊ฐ–๋Š” ์›์‹œ ๊ฐ’์„ ํ• ๋‹นํ•œ ๋ณ€์ˆ˜๋Š” ์žฌํ• ๋‹น ์ด์™ธ์—๋Š” ๋ณ€์ˆ˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์žฌํ• ๋‹น์„ ํ•˜์ง€ ์•Š๊ณ  ๋ณ€์ˆ˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๊ฐ’์˜ ๋ณ€๊ฒฝ, ์ฆ‰ ์ƒํƒœ ๋ณ€๊ฒฝ์„ ์ถ”์ ํ•˜๊ธฐ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

์ƒํƒœ ๋ณ€๊ฒฝ์„ ์ถ”์ ํ•˜๋Š” ๊ฒƒ์€ ์™œ ํ•„์š”ํ• ๊นŒ์š”? ์•„๋ž˜์˜ ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ๋ฅผ ์‚ดํŽด๋ด…์‹œ๋‹ค.

var age = 30
var copy = age

console.log(age) // 30
console.log(copy) // 30

age = 20

console.log(age) // 20
console.log(copy) // ?

age ๋ณ€์ˆ˜์— ๊ฐ’ 30์„ ํ• ๋‹นํ•˜๊ณ , copy ๋ณ€์ˆ˜์— copy ๋ณ€์ˆ˜๋ฅผ ํ• ๋‹นํ–ˆ์Šต๋‹ˆ๋‹ค.๊ทธ ํ›„ age ๋ณ€์ˆ˜์— ์ƒˆ๋กœ์šด ์ˆซ์ž ๊ฐ’ 20์„ ์žฌํ• ๋‹นํ•˜๋ฉด copy ๋ณ€์ˆ˜์˜ ๊ฐ’์€ ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”? ์ด ์งˆ๋ฌธ์˜ ํ•ต์‹ฌ์€ ๋ณ€์ˆ˜์— ๋ณ€์ˆ˜๋ฅผ ํ• ๋‹นํ–ˆ์„ ๋•Œ ๋ฌด์—‡์ด ์–ด๋–ป๊ฒŒ ์ „๋‹ฌ๋˜๋Š”๊ฐ€? ์ž…๋‹ˆ๋‹ค. ๋ณ€์ˆ˜์— ์›์‹œ ๊ฐ’์„ ๊ฐ–๋Š” ๋ณ€์ˆ˜๋ฅผ ํ• ๋‹นํ•˜๋ฉด ํ• ๋‹น๋ฐ›๋Š” ๋ณ€์ˆ˜(copy)์—๋Š” ํ• ๋‹น๋˜๋Š” ๋ณ€์ˆ˜(age)์˜ ์›์‹œ ๊ฐ’์ด ๋ณต์‚ฌ๋˜์–ด ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.

์ด๋ฅผ ๊ฐ’์— ์˜ํ•œ ์ „๋‹ฌ ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋•Œ age ๋ณ€์ˆ˜์™€ copy ๋ณ€์ˆ˜๋Š” ์ˆซ์ž ๊ฐ’ 30์„ ๊ฐ–๋Š”๋‹ค๋Š” ์ ์—์„œ๋Š” ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ age ๋ณ€์ˆ˜์™€ copy ๋ณ€์ˆ˜์˜ ๊ฐ’ 30์€ ์„œ๋กœ ๋‹ค๋ฅธ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ์ €์žฅ๋œ ๋ณ„๊ฐœ์˜ ๊ฐ’์ž…๋‹ˆ๋‹ค.

image.png

๊ฒฐ๊ตญ ๋‘ ๋ณ€์ˆ˜์˜ ์›์‹œ ๊ฐ’์€ ์„œ๋กœ ๋‹ค๋ฅธ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ์ €์žฅ๋œ ๋ณ„๊ฐœ์˜ ๊ฐ’์ด ๋˜์–ด ์–ด๋Š ํ•œ์ชฝ์—์„œ ์žฌํ• ๋‹น์„ ํ†ตํ•ด ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋”๋ผ๋„ ์„œ๋กœ ๊ฐ„์„ญํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ๋ถˆ๋ณ€์„ฑ(immutable)ํ•œ ์ƒํƒœ๋ฅผ ๊ฐ€์ง„๋‹ค๊ณ  ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

# Reference Type

๊ฐ์ฒด๋Š” ํ”„๋กœํผํ‹ฐ์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ •ํ•ด์ ธ ์žˆ์ง€ ์•Š์œผ๋ฉฐ, ๋™์ ์œผ๋กœ ์ถ”๊ฐ€๋˜๊ณ  ์‚ญ์ œ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ํ”„๋กœํผํ‹ฐ์˜ ๊ฐ’์—๋„ ์ œ์•ฝ์ด ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ์ฒด๋Š” ์›์‹œ ๊ฐ’๊ณผ ๊ฐ™์ด ํ™•๋ณดํ•ด์•ผํ•  ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์˜ ํฌ๊ธฐ๋ฅผ ์‚ฌ์ „์— ์ •ํ•  ์ˆ˜๊ฐ€ ์—†๋Š”๋ฐ์š”. ๊ฐ์ฒด๋Š” ๋ณตํ•ฉ์ ์ธ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋ฏ€๋กœ ๊ฐ์ฒด๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ด ์›์‹œ ๊ฐ’๊ณผ ๋น„๊ตํ•ด์„œ ๋ณด๋‹ค ๋ณต์žกํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ตฌํ˜„ ๋ฐฉ์‹๋„ ๋ธŒ๋ผ์šฐ์ €๋งˆ๋‹ค ๋‹ค๋ฅธ ๊ฒฝ์šฐ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์›์‹œ ๊ฐ’์€ ์ƒ๋Œ€์ ์œผ๋กœ ์ ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์†Œ๋น„ํ•˜์ง€๋งŒ ๊ฐ์ฒด๋Š” ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ํฌ๊ธฐ๊ฐ€ ๋งค์šฐ ํด ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ํ”„๋กœํผํ‹ฐ์— ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ๋„ ์›์‹œ ๊ฐ’๊ณผ ๋น„๊ตํ•  ๋•Œ ๋น„์šฉ์ด ๋งŽ์ด ๋“œ๋Š” ์ผ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ฐ์ฒด๋Š” ์›์‹œ ๊ฐ’๊ณผ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค

๊ฐ์ฒด(์ฐธ์กฐ) ํƒ€์ž…์€ ์›์‹œ๊ฐ’๊ณผ ๋‹ค๋ฅด๊ฒŒ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ๊ฐ’(mutable value) ์ž…๋‹ˆ๋‹ค. ๋จผ์ € ๋ณ€์ˆ˜์— ๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ•˜๋ฉด ์–ด๋–ค ์ผ์ด ๋ฐœ์ƒํ• ๊นŒ์š”?

var user = {
  name: 'Jun'
}

์œ„์™€ ๊ฐ™์ด ์„ ์–ธํ–ˆ์„ ๋•Œ ์›์‹œ ๊ฐ’์„ ํ• ๋‹นํ•œ ๋ณ€์ˆ˜๋Š” ์›์‹œ ๊ฐ’ ์ž์ฒด๋ฅผ ๊ฐ’์œผ๋กœ ๊ฐ–์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ•œ ๋ณ€์ˆ˜๋Š” ๋™์ ์œผ๋กœ ๋ณ€ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ฐธ์กฐ๊ฐ’์„ ๊ฐ–์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์ฐธ์กฐ ๊ฐ’์€ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๊ฐ€ ์ €์žฅ๋œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์˜ ์ฃผ์†Œ, ๊ทธ ์ž์ฒด์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ•œ ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” ์ฐธ์กฐ ๊ฐ’์„ ํ†ตํ•ด ์‹ค์ œ ๊ฐ์ฒด์— ์ ‘๊ทผํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์  ๋•Œ๋ฌธ์— ์ˆ˜์ •์— ์žˆ์–ด์„œ๋„ ์›์‹œ๊ฐ’๊ณผ๋Š” ๋‹ค๋ฅธ ํŠน์ง•์„ ๊ฐ–๋Š”๋ฐ์š”. ์›์‹œ ๊ฐ’์€ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฐ’์ด๋ฏ€๋กœ ์›์‹œ ๊ฐ’์„ ๊ฐ–๋Š” ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด ์žฌํ• ๋‹น์„ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ์— ์›์‹œ ๊ฐ’์„ ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ฐ์ฒด๋Š” ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ๊ฐ’์ด๋ฏ€๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋œ ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ์ˆ˜์ • ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋•Œ ๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ•œ ๋ณ€์ˆ˜์— ์žฌํ• ๋‹น์„ ํ•˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ ๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ•œ ๋ณ€์ˆ˜์˜ ์ฐธ์กฐ ๊ฐ’์€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ฐ์ฒด๋Š” ์›์‹œ๊ฐ’์— ๋น„ํ•ด ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ด ๋ณต์žกํ•˜๊ณ  ๋น„์šฉ์ด ๋งŽ์ด ๋“ญ๋‹ˆ๋‹ค. ์›์‹œ ๊ฐ’์ฒ˜๋Ÿผ ํฌ๊ธฐ๊ฐ€ ์ผ์ •ํ•˜์ง€๋„ ์•Š๊ณ , ํ”„๋กœํผํ‹ฐ ๊ฐ’์ด ๊ฐ์ฒด์ผ์ˆ˜๋„ ์žˆ์–ด์„œ ๋ณต์‚ฌํ•ด์„œ ์ƒ์„ฑํ•˜๋Š” ๋น„์šฉ์ด ๋งŽ์ด๋“ญ๋‹ˆ๋‹ค. ์ฆ‰ ๋ฉ”๋ชจ๋ฆฌ์˜ ํšจ์œจ์  ์‚ฌ์šฉ์ด ์–ด๋ ต๊ณ  ์„ฑ๋Šฅ์ด ๋‚˜๋น ์งˆ์ˆ˜๊ฐ€ ์žˆ๋Š”๋ฐ์š”. ๋”ฐ๋ผ์„œ ๋ฉ”๋ชจ๋ฆฌ์˜ ํšจ์œจ์  ์‚ฌ์šฉ์„ ์œ„ํ•ด ๊ฐ์ฒด๋ฅผ ๋ณต์‚ฌํ•ด ์ƒ์„ฑํ•˜๋Š” ๋น„์šฉ์„ ์ ˆ์•ฝํ•˜๊ณ , ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ๊ฐ์ฒด๋Š” ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ๊ฐ’์œผ๋กœ ์„ค๊ณ„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์˜ ํšจ์œจ์„ฑ๊ณผ ์„ฑ๋Šฅ์„ ์œ„ํ•ด ์–ด๋Š ์ •๋„์˜ ๊ตฌ์กฐ์ ์ธ ๋‹จ์ ์„ ๊ฐ์•ˆํ•œ ์„ค๊ณ„์ธ ๊ฒƒ์ด์ฃ .

์ด๋Ÿฌํ•œ ๊ตฌ์กฐ๋กœ ์ธํ•ด ํ•œ๊ฐ€์ง€ ๋‹จ์ ์ด ์žˆ์„ ์ˆ˜ ์žˆ๋Š”๋ฐ์š”. ๊ทธ๊ฒƒ์€ ์›์‹œ ๊ฐ’๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์‹๋ณ„์ž๊ฐ€ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

var user = {
  name: 'Jun'
}

var copy = person

image.png

๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ณ€์ˆ˜(์›๋ณธ, user)๋ฅผ ๋‹ค๋ฅธ ๋ณ€์ˆ˜(์‚ฌ๋ณธ, copy)์— ํ• ๋‹นํ•˜๋ฉด ์›๋ณธ์˜ ์ฐธ์กฐ ๊ฐ’์ด ๋ณต์‚ฌ๋˜์–ด ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์ฐธ์กฐ์— ์˜ํ•œ ์ „๋‹ฌ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋‘ ๊ฐœ์˜ ์‹๋ณ„์ž๋Š” ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋ฅผ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์›๋ณธ ๋˜๋Š” ์‚ฌ๋ณธ ์ค‘ ์–ด๋Š ํ•œ์ชฝ์—์„œ ๊ฐ์ฒด๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด ์„œ๋กœ ์˜ํ–ฅ์„ ์ฃผ๊ณ  ๋ฐ›๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๊ฒฐ๊ตญ ๊ฐ’์— ์˜ํ•œ ์ „๋‹ฌ๊ณผ ์ฐธ์กฐ์— ์˜ํ•œ ์ „๋‹ฌ์€ ์‹๋ณ„์ž๊ฐ€ ๊ธฐ์–ตํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๊ฐ’์„ ๋ณต์‚ฌํ•ด์„œ ์ „๋‹ฌํ•œ๋‹ค๋Š” ๋ฉด์—์„œ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์‹๋ณ„์ž๊ฐ€ ๊ธฐ์–ตํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„, ์ฆ‰ ๋ณ€์ˆ˜์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๊ฐ’์ด ์›์‹œ ๊ฐ’์ด๋ƒ ์ฐธ์กฐ ๊ฐ’์ด๋ƒ์˜ ์ฐจ์ด๋งŒ ์žˆ์„ ๋ฟ์ž…๋‹ˆ๋‹ค.

# ๐Ÿ“˜ ์ •๋ฆฌ

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋ชจ๋“  ๊ฐ’์€ ์•„๋ž˜ ์ด์œ ๋กœ ์ธํ•ด ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ํ•„์š”ํ•˜๋‹ค
    • ๊ฐ’์„ ์ €์žฅํ•  ๋•Œ ํ™•๋ณดํ•ด์•ผ ํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์˜ ํฌ๊ธฐ๋ฅผ ๊ฒฐ์ •ํ•˜๊ธฐ ์œ„ํ•ด
    • ๊ฐ’์„ ์ฐธ์กฐํ•  ๋•Œ ํ•œ ๋ฒˆ์— ์ฝ์–ด ๋“ค์—ฌ์•ผ ํ•  ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์˜ ํฌ๊ธฐ๋ฅผ ๊ฒฐ์ •ํ•˜๊ธฐ ์œ„ํ•ด
    • ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ฝ์–ด ๋“ค์ธ 2์ง„์ˆ˜๋ฅผ ์–ด๋–ป๊ฒŒ ํ•ด์„ํ• ์ง€ ๊ฒฐ์ •ํ•˜๊ธฐ ์œ„ํ•ด
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋ณ€์ˆ˜๋Š” ์„ ์–ธ์ด ์•„๋‹Œ ํ• ๋‹น์— ์˜ํ•ด ํƒ€์ž…์ด ๊ฒฐ์ •๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์žฌํ• ๋‹น์— ์˜ํ•ด ๋ณ€์ˆ˜์˜ ํƒ€์ž…์€ ์–ธ์ œ๋“ ์ง€ ๋™์ ์œผ๋กœ ๋ณ€ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์›์‹œ๊ฐ’์€ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฐ’(immutable value)์ด๋‹ค. ๋ฐ˜๋ฉด ๊ฐ์ฒด(์ฐธ์กฐํ˜•)์˜ ๊ฐ’์€ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ๊ฐ’(mutable)์ž…๋‹ˆ๋‹ค.
  • ์›์‹œ ๊ฐ’์„ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜๋ฉด ๋ณ€์ˆ˜(ํ™•๋ณด๋œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„)์—๋Š” ์‹ค์ œ ๊ฐ’์ด ์ €์žฅ๋œ๋‹ค. ์ด์— ๋น„ํ•ด ๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ•˜๋ฉด ๋ณ€์ˆ˜(ํ™•๋ณด๋œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„)์—๋Š” ์ฐธ์กฐ ๊ฐ’์ด ์ €์žฅ๋œ๋‹ค.
  • ์›์‹œ ๊ฐ’์„ ๊ฐ–๋Š” ๋ณ€์ˆ˜๋ฅผ ๋‹ค๋ฅธ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜๋ฉด ์›๋ณธ์˜ ์›์‹œ ๊ฐ’์ด ๋ณต์‚ฌ๋˜์–ด ์ „๋‹ฌ๋œ๋‹ค. ์ด๋ฅผ ๊ฐ’์— ์˜ํ•œ ์ „๋‹ฌ(pass by value)๋ผ๊ณ  ํ•œ๋‹ค. ์ด์— ๋น„ํ•ด ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ณ€์ˆ˜๋ฅผ ๋‹ค๋ฅธ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜๋ฉด ์›๋ณธ์˜ ์ฐธ์กฐ ๊ฐ’์ด ๋ณต์‚ฌ๋˜์–ด ์ „๋‹ฌ๋œ๋‹ค. ์ด๋ฅผ ์ฐธ์กฐ์— ์˜ํ•œ ์ „๋‹ฌ(pass by refrence)๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

# ๐Ÿ”— ์ฐธ๊ณ  ๋งํฌ