[JS] μ›μ‹œ νƒ€μž…κ³Ό μ°Έμ‘° νƒ€μž…

JavaScript의 데이터 νƒ€μž…μ— λŒ€ν•΄ μ•Œμ•„λ΄…λ‹ˆλ‹€.

λ³€μˆ˜ vs κ°’

λ¨Όμ € λ³€μˆ˜μ™€ κ°’μ˜ ꡬ뢄을 λͺ…ν™•νžˆ ν•˜μž.

λ³€μˆ˜λŠ” μž„μ˜μ˜ 값을 β€˜μ €μž₯β€™ν•˜κΈ° μœ„ν•œ λ©”λͺ¨λ¦¬ 곡간이며
값은 λ³€μˆ˜μ— β€˜μ €μž₯β€™λœ λ°μ΄ν„°λ‘œμ„œ ν‘œν˜„μ‹μ΄ ν‰κ°€λœ 결과이닀.

let x = 10;

μœ„ μ½”λ“œμ—μ„œ λ³€μˆ˜λŠ” x이고 값은 10이닀.

λ³€μˆ˜ μ„ μ–Έν•˜κΈ°

JavaScriptμ—μ„œ λ³€μˆ˜ μ„ μ–Έ μ‹œ var, let, const ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€.

var ν‚€μ›Œλ“œλ‘œ λ³€μˆ˜λ₯Ό μ„ μ–Έν•  경우 ν•¨μˆ˜ μŠ€μ½”ν”„λ₯Ό 가진닀.

function fun() {
  if (true) { var x: number = 10; }
  console.log(x); // 10
}

fun();

let ν‚€μ›Œλ“œλ‘œ λ³€μˆ˜λ₯Ό μ„ μ–Έν•  경우 블둝 μŠ€μ½”ν”„λ₯Ό 가진닀.

function fun() {
  if (true) { let x: number = 10; }
  console.log(x); // error
}

fun();

const ν‚€μ›Œλ“œλ‘œ λ³€μˆ˜λ₯Ό μ„ μ–Έν•  경우 μƒμˆ˜λ₯Ό μ„ μ–Έν•œλ‹€.
λ§ˆμ°¬κ°€μ§€λ‘œ 블둝 μŠ€μ½”ν”„λ₯Ό 가진닀.

const x = 10;
x = 20; // error

μ›μ‹œ νƒ€μž… (Primitive Types)

μ›μ‹œ νƒ€μž… 값이 λ³€μˆ˜μ— 할당될 λ•Œ λ³€μˆ˜μ—λŠ” κ°’ μžμ²΄κ°€ μ €μž₯λœλ‹€.
μ΄λŠ” λ³€μˆ˜κ°€ ν•΄λ‹Ή κ°’μ˜ λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό 가리킴과 μƒν†΅ν•œλ‹€.

이 값은 객체가 μ•„λ‹ˆκΈ°μ— λ©”μ„œλ“œλ₯Ό 가지지 μ•ŠλŠ”λ‹€.

ν•œνŽΈ μ›μ‹œ νƒ€μž… 값은 λΆˆλ³€μ„±μ„ 가진닀.
λ”°λΌμ„œ λ³€μˆ˜μ˜ 값을 λ³€κ²½ν•˜λ©΄ μƒˆλ‘œμš΄ λ©”λͺ¨λ¦¬ μ£Όμ†Œμ— μƒˆλ‘œμš΄ 값을 μ €μž₯ν•˜κ²Œ λœλ‹€.

let x = 10;
x = 20;
  1. number νƒ€μž… κ°’ 10을 λ©”λͺ¨λ¦¬μ— μ €μž₯ν•œλ‹€. (λ©”λͺ¨λ¦¬ μ£Όμ†Œ: 0xA)
  2. λ³€μˆ˜ xκ°€ λ©”λͺ¨λ¦¬ μ£Όμ†Œ 0xAλ₯Ό 가리킨닀.
  3. number νƒ€μž… κ°’ 20을 λ©”λͺ¨λ¦¬μ— μ €μž₯ν•œλ‹€. (λ©”λͺ¨λ¦¬ μ£Όμ†Œ: 0xB)
  4. λ³€μˆ˜ xκ°€ λ©”λͺ¨λ¦¬ μ£Όμ†Œ 0xBλ₯Ό 가리킨닀.

μ΄λ²ˆμ—” λ³€μˆ˜μ˜ 값을 λ³΅μ‚¬ν•˜λŠ” 상황을 μƒκ°ν•΄λ³΄μž.

let x = 10;
let y = x;
  1. number νƒ€μž… κ°’ 10을 λ©”λͺ¨λ¦¬μ— μ €μž₯ν•œλ‹€. (λ©”λͺ¨λ¦¬ μ£Όμ†Œ: 0xA)
  2. λ³€μˆ˜ xκ°€ λ©”λͺ¨λ¦¬ μ£Όμ†Œ 0xAλ₯Ό 가리킨닀.
  3. λ³€μˆ˜ xκ°€ κ°€λ¦¬ν‚€λŠ” number νƒ€μž… κ°’ 10을 λ©”λͺ¨λ¦¬μ— μ €μž₯ν•œλ‹€. (λ©”λͺ¨λ¦¬ μ£Όμ†Œ: 0xB)
  4. λ³€μˆ˜ yκ°€ λ©”λͺ¨λ¦¬ μ£Όμ†Œ 0xBλ₯Ό 가리킨닀.

즉 λ³€μˆ˜ x와 yλŠ” μ„œλ‘œ λ‹€λ₯Έ λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό κ°€λ¦¬ν‚€μ§€λ§Œ 같은 값을 가진닀.

λŒ€ν‘œμ μΈ μ›μ‹œ νƒ€μž…μ€ λ‹€μŒκ³Ό κ°™λ‹€.

  • number
  • string
  • boolean

Q. string의 λ©”μ„œλ“œκ°€ μ—†μ–΄μ•Ό ν•˜λŠ” 것 μ•„λ‹Œκ°€?

μš°λ¦¬κ°€ μ‚¬μš©ν•˜λŠ” string λ©”μ„œλ“œλŠ” String 객체의 λ©”μ„œλ“œμ΄λ‹€.
string 값이 λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•  λ•Œ μžλ™μœΌλ‘œ String 객체둜 λ³€ν™˜λ˜μ–΄ λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•œλ‹€.

μ°Έμ‘° νƒ€μž… (Reference Types)

μ°Έμ‘° νƒ€μž… 값은 Heap λ©”λͺ¨λ¦¬ 곡간에 μ €μž₯된고 λ³€μˆ˜μ—λŠ” 값이 μ €μž₯된 Heap λ©”λͺ¨λ¦¬ μ£Όμ†Œκ°€ μ €μž₯λœλ‹€.
μ΄λŠ” let ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ λ°°μ—΄μ˜ 경우 λ©”λͺ¨λ¦¬ μ£Όμ†Œμ˜ μž¬ν• λ‹Ήμ΄ κ°€λŠ₯ν•˜λ‹€λŠ” 것을 μ˜λ―Έν•œλ‹€.

λ”°λΌμ„œ λ‹€λ₯Έ μ°Έμ‘° νƒ€μž… 값을 μž¬ν• λ‹Ήν•˜κ³ μž ν•˜λŠ” κ²½μš°κ°€ μ•„λ‹Œ 경우 const ν‚€μ›Œλ“œλ‘œ 배열을 μ„ μ–Έν•˜λŠ” 것이 λ°”λžŒμ§ν•˜λ‹€.
μ°Έμ‘° νƒ€μž… 값을 λ³€κ²½ν•˜λ”λΌλ„ Heap의 λ©”λͺ¨λ¦¬ μ£Όμ†ŒλŠ” λ³€ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ΄λ‹€.

λŒ€ν‘œμ μΈ μ°Έμ‘° νƒ€μž…μ€ λ‹€μŒκ³Ό κ°™λ‹€.

  • object
  • array
  • function
const obj = {
  name: 'John',
  age: 20
};

const arr = [1, 2, 3];