Skip to content

Latest commit

 

History

History
177 lines (115 loc) ยท 10.2 KB

primitive-object.md

File metadata and controls

177 lines (115 loc) ยท 10.2 KB

๐Ÿ’ป ์›์‹œ ํƒ€์ž…(primitive type) vs ๊ฐ์ฒด ํƒ€์ž…(object/reference)

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์ œ๊ณตํ•˜๋Š” 7๊ฐ€์ง€ ๋ฐ์ดํ„ฐ ํƒ€์ž…(์ˆซ์ž, ๋ฌธ์ž์—ด, ๋ถˆ๋ฆฌ์–ธ, null, undefined, Symbol, Object)์€ ํฌ๊ฒŒ ์›์‹œ ํƒ€์ž…(primitive type)๊ณผ ๊ฐ์ฒด(object/reference type)์œผ๋กœ ๊ตฌ๋ถ„๋œ๋‹ค.
  • ์›์‹œ ํƒ€์ž…๊ณผ ๊ฐ์ฒด ํƒ€์ž…์€ ํฌ๊ฒŒ 3๊ฐ€์ง€ ์ธก๋ฉด์—์„œ ๋‹ค๋ฅด๋‹ค.
    • ์›์‹œ ํƒ€์ž…์˜ ๊ฐ’, ์ฆ‰ ์›์‹œ ๊ฐ’์€ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฐ’(immutable value)๋‹ค.
    • ๊ฐ์ฒด ํƒ€์ž…์€ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ๊ฐ’(mutable value)๋‹ค.
    • ์›์‹œ ๊ฐ’์„ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜๋ฉด ๋ณ€์ˆ˜(ํ™•๋ณด๋œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„)์—๋Š” ์‹ค์ œ ๊ฐ’์ด ์ €์žฅ๋œ๋‹ค.
    • ๊ฐ์ฒด๋Š” ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜๋ฉด ๋ณ€์ˆ˜(ํ™•๋ณด๋œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„)์— ์ฐธ์กฐ ๊ฐ’์ด ์ €์žฅ๋œ๋‹ค.
    • ์›์‹œ ๊ฐ’์„ ๊ฐ–๋Š” ๋ณ€์ˆ˜๋ฅผ ๋‹ค๋ฅธ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜๋ฉด ์›๋ณธ์˜ ์›์‹œ ๊ฐ’์ด ๋ณต์‚ฌ๋˜์–ด ์ „๋‹ฌ๋œ๋‹ค. ์ด๋ฅผ ๊ฐ’์— ์˜ํ•œ ์ „๋‹ฌ(pass by value)๋ผ๊ณ  ํ•œ๋‹ค.
    • ๊ฐ์ฒด๋Š” ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ณ€์ˆ˜๋ฅผ ๋‹ค๋ฅธ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜๋ฉด ์›๋ณธ์˜ ์ฐธ์กฐ ๊ฐ’์ด ๋ณต์‚ฌ๋˜์–ด ์ „๋‹ฌ๋œ๋‹ค. ์ด๋ฅผ ์ฐธ์กฐ์— ์˜ํ•œ ์ „๋‹ฌ(pass by reference)๋ผ๊ณ  ํ•œ๋‹ค.

์›์‹œ ๊ฐ’

๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฐ’(immutable value)

  • ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅ ํ•œ ๊ฐ’์€ ๋‹ค์‹œ ๋งํ•ด, ํ•œ๋ฒˆ ์ƒ์„ฑ๋œ ์›์‹œ ๊ฐ’์€ ์ฝ๊ธฐ ์ „์šฉ(read only)๊ฐ’์œผ๋กœ์„œ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Œ์„ ์˜๋ฏธํ•œ๋‹ค.
    • ์ด๋Ÿฌํ•œ ๋ถˆ๋ณ€์„ฑ์€ ์›์‹œ ๊ฐ’ ๋ฐ์ดํ„ฐ์˜ ์‹ ๋ขฐ์„ฑ์„ ๋ณด์žฅํ•œ๋‹ค.
  • ์ฐธ๊ณ ๋กœ! ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์€ ๋ณ€์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ ๊ฐ’์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ์ด๋‹ค. ์ฆ‰, ์›์‹œ๊ฐ’ ์ž์ฒด๋ฅผ ๋ณ€๊ฒฝ ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฑฐ์ง€ ๋ณ€์ˆ˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ๋ณ€์ˆ˜๋Š” ์–ธ์ œ๋“ ์ง€ ์žฌํ• ๋‹นํ•ด์„œ ๊ฐ’์„ ๋ณ€๊ฒฝ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์•„๋ž˜ ์˜ˆ์ œ๋ฅผ ์ฐธ๊ณ ํ•˜์ž.
let str = "123";

// ์›์‹œ๊ฐ’์ธ ๋ฌธ์ž์—ด์„ ์ธ๋ฑ์Šค๋กœ ์ ‘๊ทผํ•ด์„œ ๋ณ€๊ฒฝํ•จ, ์—๋Ÿฌ๋Š” ๋ฐœ์ƒํ•˜์ง€ ์•Š์ง€๋งŒ ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜์ง€๋Š” ์•Š์Œ
str[0] = "4";

console.log(str); // "123"

str = "456"; // ๋ณ€์ˆ˜๋ฅผ ์žฌํ• ๋‹นํ•ด์„œ ๊ฐ’์„ ๋ฐ”๊ฟˆ

console.log(str); // "456"

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2023-04-17 แ„‹แ…ฉแ„Œแ…ฅแ†ซ 12 08 25

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

๊ฐ’์— ์˜ํ•œ ์ „๋‹ฌ

  • ์›์‹œ ๊ฐ’์„ ๊ฐ–๋Š” ๋ณ€์ˆ˜๋ฅผ ๋‹ค๋ฅธ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜๋ฉด ์›๋ณธ์˜ ์›์‹œ ๊ฐ’์ด ๋ณต์‚ฌ๋˜์–ด ์ „๋‹ฌ๋œ๋‹ค. ์ด๋ฅผ ๊ฐ’์— ์˜ํ•œ ์ „๋‹ฌ(pass by value)๋ผ๊ณ  ํ•œ๋‹ค.
let score = 80;
let copy = score;

console.log(score); // 80
console.log(copy); // 80

console.log(score === copy); // true
  • ์œ„ ์˜ˆ์ œ์ฒ˜๋Ÿผ copy ๋ณ€์ˆ˜์—๋‹ค score(80๋กœ ํ‰๊ฐ€)์„ ํ• ๋‹นํ•˜๋ฉด copy ๋ณ€์ˆ˜์—๋„ 80์ด ํ• ๋‹น๋œ๋‹ค. ์ด๋•Œ ์ƒˆ๋กœ์šด ์ˆซ์ž ๊ฐ’ 80์ด ์ƒ์„ฑ๋˜์–ด ํ• ๋‹น๋œ๋‹ค.

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2023-04-17 แ„‹แ…ฉแ„Œแ…ฅแ†ซ 12 20 13

  • score์™€ copy๋Š” ๊ฐ™์€ ์ˆซ์ž 80์„ ๊ฐ–๋Š”๋‹ค๋Š” ์ ์—์„œ ๋™์ผํ•˜๋‹ค. ํ•˜์ง€๋งŒ ์œ„ ์ด๋ฏธ์ง€์ฒ˜๋Ÿผ score์™€ copy์˜ ๊ฐ’ 80์€ ๊ฐ๊ฐ ๋‹ค๋ฅธ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ์ €์žฅ๋œ๋‹ค.
let score = 80;
let copy = score;

console.log(score === copy); // true

score = 100;
console.log(score); // 100
console.log(copy); // 80

console.log(score === copy); // false
  • score์™€ copy ๋ณ€์ˆ˜์˜ ๊ฐ’ 80์€ ๊ฐ๊ฐ ๋‹ค๋ฅธ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ์ €์žฅ๋œ ๋ณ„๊ฐœ์˜ ๊ฐ’์„ ์ฃผ์˜ํ•ด์•ผํ•œ๋‹ค.
    • ๋”ฐ๋ผ์„œ score ๊ฐ’์„ 100์œผ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค๋ฉด? copy์— ์–ด๋– ํ•œ ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์œผ๋ฉฐ, ์„œ๋กœ ๊ฐ™์€์ง€ ๋น„๊ต๋ฅผ ํ•ด๋„ false๋กœ ํ‰๊ฐ€๋œ๋‹ค.

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2023-04-17 แ„‹แ…ฉแ„Œแ…ฅแ†ซ 1 10 42

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

  • ๋˜ ๋‹ค๋ฅธ ์‚ฌ์‹ค2 ๊ฐ’์— ์˜ํ•œ ์ „๋‹ฌ์ด๋ผ๋Š” ์šฉ์–ด๋„ ์‚ฌ์‹ค ECMAScript ์‚ฌ์–‘์— ๋“ฑ์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค. ๊ฐ’์— ์˜ํ•œ ์ „๋‹ฌ์ด๋ผ๋Š” ์šฉ์–ด๊ฐ€ ์˜คํ•ด๋ฅผ ๋ถˆ๋Ÿฌ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.
  • ์—„๊ฒฉํ•˜๊ฒŒ ํ‘œํ˜„ํ•˜์ž๋ฉด ๋ณ€์ˆ˜์—๋Š” ๊ฐ’์ด ์ „๋‹ฌ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๊ฐ€ ์ „๋‹ฌ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด๋Š” ๋ณ€์ˆ˜์™€ ๊ฐ™์€ ์‹๋ณ„์ž๋Š” ๊ฐ’์ด ์•„๋‹ˆ๋ผ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๊ธฐ์–ตํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค!
  • ์‹๋ณ„์ž๋Š” ์–ด๋–ค ๊ฐ’์„ ๊ตฌ๋ณ„ํ•ด ๋‚ผ ์ˆ˜ ์žˆ๋Š” ๊ณ ์œ ํ•œ ์ด๋ฆ„์ด๋‹ค. ๊ฐ’์€ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ์ €์žฅ๋˜์–ด ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ์‹๋ณ„์ž๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” ์–ด๋–ค ๊ฐ’์„ ์‹๋ณ„ํ•ด๋‚ด๋Š” ๋ณ€์ˆ˜๋‹ค.
    • ๋”ฐ๋ผ์„œ! ์‹๋ณ„์ž๋Š” ๊ฐ’์ด ์•„๋‹Œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๊ธฐ์–ตํ•˜๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค.

๊ฐ์ฒด

๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ๊ฐ’(mutable value)

  • ๊ฐ์ฒด(์ฐธ์กฐ) ํƒ€์ž…์˜ ๊ฐ’, ์ฆ‰ ๊ฐ์ฒด๋Š” ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ๊ฐ’์ด๋‹ค.
  • ์›์‹œ ๊ฐ’์„ ํ• ๋‹นํ•œ ๋ณ€์ˆ˜๊ฐ€ ๊ธฐ์–ตํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ์ ‘๊ทผํ•˜๋ฉด ์›์‹œ ๊ฐ’์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๊ทธ์— ๋ฐ˜ํ•ด, ๊ฐ์ฒด๋Š” ํ• ๋‹นํ•œ ๋ณ€์ˆ˜๊ฐ€ ๊ธฐ์–ตํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ์ ‘๊ทผํ•˜๋ฉด ์ฐธ์กฐ ๊ฐ’(reference value)์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์ฐธ์กฐ ๊ฐ’์€ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๊ฐ€ ์ €์žฅ๋œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์˜ ์ฃผ์†Œ, ๊ทธ ์ž์ฒด๋‹ค.

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2023-04-17 แ„‹แ…ฉแ„Œแ…ฅแ†ซ 1 23 34

  • ์œ„ ๊ทธ๋ฆผ ์ฒ˜๋Ÿผ ๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ•œ ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ ์ €์žฅ๋˜์–ด ์žˆ๋Š” ์ฐธ์กฐ ๊ฐ’(์ƒ์„ฑ๋œ ๊ฐ์ฒด๊ฐ€ ์ €์žฅ๋œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์˜ ์ฃผ์†Œ)์„ ํ†ตํ•ด ์‹ค์ œ ๊ฐ์ฒด์— ์ ‘๊ทผํ•œ๋‹ค.

const person = {
  name: "Lee",
};

person.name = "Kim";
person.address = "Seoul";

console.log(person); // { name: "Kim", address: "Seoul" }
  • ์›์‹œ ๊ฐ’์€ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฐ’์ด๋ฏ€๋กœ ์›์‹œ ๊ฐ’์„ ๊ฐ–๋Š” ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด ์žฌํ• ๋‹น ์™ธ์—๋Š” ์—†๋‹ค. ์‹ฌ์ง€์–ด const๋กœ ์„ ์–ธํ–ˆ์œผ๋ฉด ๊ทธ๋งˆ์ €๋„ ์•ˆ๋œ๋‹ค.
  • ๊ฐ์ฒด๋Š” ๊ณ„์† ์–ธ๊ธ‰ํ–ˆ์ง€๋งŒ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ๊ฐ’์ด๋‹ค. ์žฌํ• ๋‹น ์—†์ด๋„ ๊ฐ์ฒด์˜ ๋‚ด์šฉ์„ ์ง์ ‘ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, ํ”„๋กœํผํ‹ฐ ๊ฐ’์„ ๋™์ ์œผ๋กœ ์ถ”๊ฐ€, ์‚ญ์ œ, ๊ฐฑ์‹ ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2023-04-17 แ„‹แ…ฉแ„Œแ…ฅแ†ซ 1 28 42

  • ์œ„ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ๊ฐ์ฒด๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋œ ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ์ˆ˜์ • ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋•Œ ๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ•œ ๋ณ€์ˆ˜์— ์žฌํ• ๋‹น์„ ํ•˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ ๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ•œ ๋ณ€์ˆ˜์˜ ์ฐธ์กฐ ๊ฐ’์€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š”๋‹ค.

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

์ฐธ์กฐ์— ์˜ํ•œ ์ „๋‹ฌ

const person = {
  name: "Lee",
};
const copy = person; // ์ฐธ์กฐ ๊ฐ’์„ ๋ณต์‚ฌ

console.log(person === copy); // true

copy.name = "Kim";

console.log(person); // { name: "Kim" }
  • ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์›๋ณธ ๋ณ€์ˆ˜๋ฅผ ๋‹ค๋ฅธ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜๋ฉด ์›๋ณธ์˜ ์ฐธ์กฐ ๊ฐ’์ด ๋ณต์‚ฌ๋˜์–ด ์ „๋‹ฌ๋œ๋‹ค ์ด๋ฅผ ์ฐธ์กฐ์— ์˜ํ•œ ์ „๋‹ฌ์ด๋ผ๊ณ  ํ•œ๋‹ค.

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2023-04-17 แ„‹แ…ฉแ„Œแ…ฅแ†ซ 1 36 02

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

์ฐธ๊ณ 

  • ๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ Deep Dive