Skip to content

Latest commit

Β 

History

History
124 lines (85 loc) Β· 5.05 KB

File metadata and controls

124 lines (85 loc) Β· 5.05 KB

κΈ°λ³Έν˜• 데이터와 μ°Έμ‘°ν˜• 데이터

κΈ°λ³Έν˜• 데이터 (primitive type)

  • Number
  • String
  • Boolean
  • Null
  • Undefined
  • Symbol
  • .etc

μ°Έμ‘°ν˜• 데이터 (reference type)

  • Object
  • Array
  • Function
  • Date
  • regexp
  • Map, WeakMap
  • Set, WeakSet

κΈ°λ³Έν˜•κ³Ό μ°Έμ‘°ν˜•μ„ κ΅¬λΆ„ν•˜λŠ” κΈ°μ€€

κΈ°λ³Έν˜•κ³Ό μ°Έμ‘°ν˜•μ„ ꡬ뢄 μ§“λŠ” κ°€μž₯ 큰 점은 μ‹€μ œ κ°’ 전체 볡사 vs μ‹€μ œ 값이 λ“€μ–΄μžˆλŠ” μ£Όμ†Œ κ°’ 볡사이닀.

β–· κΈ°λ³Έν˜• (copy value of a)

let a = 1;
let b = a;

a += 10;
console.log(a) //11
console.log(b) //1

μœ„μ˜ μ½”λ“œλ₯Ό μ‚΄νŽ΄λ³΄λ©΄ a의 값이 λ³€ν•˜λ”λΌλ„ b의 값은 κ·ΈλŒ€λ‘œ 인 것을 λ³Ό 수 μžˆλ‹€.
let b = a; μ½”λ“œλ₯Ό 톡해 aκ°’ 전체가 λ³΅μ‚¬λ˜μ–΄ bλΌλŠ” λ³€μˆ˜μ— λ‹΄κ²Όλ‹€.
a, bλŠ” μ„œλ‘œ 영ν–₯을 λ°›μ§€ μ•Šκ³  λ…λ¦½μ μœΌλ‘œ μ‘΄μž¬ν•˜λŠ” 것을 λ³Ό 수 μžˆλ‹€.

[κΈ°λ³Έν˜• 데이터가 μ €μž₯λ˜λŠ” μˆœμ„œ]

  1. λ³€μˆ˜ μ˜μ—­μ—μ„œ 빈 곡간(@1003 : μž„μ˜μ˜ μ£Όμ†Œ κ°’)을 ν™•λ³΄ν•œλ‹€.

  2. ν™•λ³΄ν•œ κ³΅κ°„μ˜ μ‹λ³„μž(λ³€μˆ˜λͺ…)λ₯Ό a둜 μ§€μ •ν•œλ‹€.

  3. 일단 데이터 μ˜μ—­μ—μ„œ 1을 μ°Ύκ³ , μ—†μœΌλ©΄ 데이터 곡간을 ν•˜λ‚˜ λ§Œλ“€μ–΄(@5004)에 숫자 1을 μ €μž₯ν•œλ‹€.

  4. λ³€μˆ˜ μ˜μ—­μ—μ„œ aλΌλŠ” μ‹λ³„μžλ₯Ό κ²€μƒ‰ν•œλ‹€.(@1003).

  5. μ•žμ„œ μ €μž₯ν•œ λ¬Έμžμ—΄μ˜ μ£Όμ†Œ(@5004)λ₯Ό @1003의 곡간에 μ—°κ²°ν•œλ‹€.
    a += 10 μ½”λ“œ 처리

  6. 1이 μ €μž₯된 곡간에 11을 ν• λ‹Ήν•˜λŠ” λŒ€μ‹  데이터 μ˜μ—­μ—μ„œ 11을 μ°Ύκ³ , μ—†μœΌλ©΄ μƒˆλ‘œ λ§Œλ“€μ–΄ λ³„λ„μ˜ 곡간에 μ €μž₯ν•œλ‹€.

  7. κ·Έ μ£Όμ†Œλ₯Ό 1003의 곡간에 μ—°κ²°ν•œλ‹€.

  • λΆˆλ³€κ°’ (immutable)

μœ„μ˜ 처리 κ³Όμ •μ—μ„œ ν•œ 번 λ§Œλ“  값은 λ‹€λ₯Έ κ°’μœΌλ‘œ λ³€κ²½λ˜μ§€ μ•ŠλŠ”λ‹€.
λŒ€μ‹  μƒˆλ‘œ λ§Œλ“œλŠ” 과정을 ν†΅ν•΄μ„œλ§Œ 변경이 μΌμ–΄λ‚˜κ³  μžˆλ‹€. 이것이 λΆˆλ³€ κ°’μ˜ μ„±μ§ˆμ΄λ‹€.
ν•œ 번 λ§Œλ“€μ–΄μ§„ 값은 κ°€λΉ„μ§€ μ»¬λ ‰νŒ…μ„ λ‹Ήν•˜μ§€ μ•ŠλŠ” ν•œ μ˜μ›νžˆ λ³€ν•˜μ§€ μ•ŠλŠ”λ‹€.

β–· μ°Έμ‘°ν˜• ( a has address of "{ x : 1}" )

let a = { x : 1 };
let b = a;

a.x += 10;
console.log(a.x); //11
console.log(b.x) //11

κΈ°λ³Έν˜•κ³Ό λ‹€λ₯΄κ²Œ let b = a; μ½”λ“œλ₯Ό 톡해 {x : 1} 의 μ£Όμ†Œ 값이 bλΌλŠ” λ³€μˆ˜μ— λ‹΄κ²Όλ‹€.

a, bλ₯Ό μ½˜μ†”λ‘œ 찍어보면 aκ°’λ§Œ λ³€ν™”μ‹œμΌ°μ§€λ§Œ, b값도 +10이 된 것을 μ•Œ 수 μžˆλ‹€.

즉 a, bλŠ” μ„œλ‘œ 영ν–₯을 λ°›κ³  μžˆλŠ” 것을 λ³Ό 수 μžˆλ‹€.

[μ°Έμ‘°ν˜• 데이터가 μ €μž₯λ˜λŠ” μˆœμ„œ]

  1. λ³€μˆ˜ μ˜μ—­μ—μ„œ 빈 곡간(@1002 : μž„μ˜μ˜ μ£Όμ†Œ κ°’)을 ν™•λ³΄ν•œλ‹€.

  2. ν™•λ³΄ν•œ κ³΅κ°„μ˜ μ‹λ³„μž(λ³€μˆ˜λͺ…)λ₯Ό a둜 μ§€μ •ν•œλ‹€.

  3. μž„μ˜μ˜ 데이터 μ €μž₯ 곡간(@5001) 에 데이터λ₯Ό μ €μž₯ν•˜λ €κ³  λ³΄λ‹ˆ μ—¬λŸ¬ 개의 ν”„λ‘œνΌν‹°λ‘œ 이뀄진 데이터 그룹이닀.
    이 κ·Έλ£Ή λ‚΄λΆ€μ˜ ν”„λ‘œνΌν‹°(x) 듀을 μ €μž₯ν•˜κΈ° μœ„ν•΄ λ³„λ„μ˜ λ³€μˆ˜ μ˜μ—­μ„ λ§ˆλ ¨ν•˜κ³ , κ·Έ μ˜μ—­μ˜ μ£Όμ†Œ(@7103~ ?)λ₯Ό @5001에 μ €μž₯ν•œλ‹€.

  4. @7103 에 xλΌλŠ” ν”„λ‘œνΌν‹° 이름을 μ§€μ •ν•œλ‹€.

  5. 데이터 μ˜μ—­μ—μ„œ 숫자 1을 κ²€μƒ‰ν•˜κ³  μ—†μœΌλ©΄, μž„μ˜λ‘œ @5003에 μ €μž₯ν•˜κ³ , 이 μ£Όμ†Œλ₯Ό λ‹€μ‹œ @7103에 μ €μž₯ν•œλ‹€.
    a.x += 10 μ½”λ“œ 처리

  6. 데이터 μ˜μ—­μ—μ„œ 숫자 11을 κ²€μƒ‰ν•œλ‹€. 검색 κ²°κ³Όκ°€ μ—†μœΌλ©΄ 빈 곡간인 @5005에 μ €μž₯ν•˜κ³  κ·Έ μ£Όμ†Œλ₯Ό @7103에 μ €μž₯ν•œλ‹€.

  • κ°€λ³€κ°’ (mutable)

μœ„μ˜ 처리 κ³Όμ •μ—μ„œ 10을 λ”ν•˜κΈ° μ „κ³Ό λ”ν•œ ν›„ λ³€μˆ˜ aκ°€ 바라보고 μžˆλŠ” μ£Όμ†ŒλŠ” μ—¬μ „νžˆ @5001둜 λ³€ν•˜μ§€ μ•ŠλŠ” 것을 λ³Ό 수 μžˆλ‹€.
즉 'μƒˆλ‘œμš΄ 객체'κ°€ λ§Œλ“€μ–΄μ§„ 것이 μ•„λ‹ˆλΌ 기쑴의 객체 λ‚΄λΆ€μ˜ κ°’λ§Œ 1μ—μ„œ 11둜 바뀐 것이닀.
데이터 μ˜μ—­μ— μ €μž₯된 값은 λͺ¨λ‘ λΆˆλ³€κ°’μ΄μ§€λ§Œ(1,11), λ³€μˆ˜(@7103)μ—λŠ” λ‹€λ₯Έ 값을 μ–Όλ§ˆλ“ μ§€ λŒ€μž…ν•  수 μžˆλ‹€.

  • λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ…

μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ…μ΄λΌλŠ” νŠΉμ§•μ„ κ°–κ³  μžˆλ‹€.

console.log(val1);
var val1;

μ½˜μ†”μ°½μ— λ³€μˆ˜ val1을 좜λ ₯ν•˜λŠ” μ½”λ“œλ₯Ό μž…λ ₯ν–ˆλ‹€. 그런데 λ³€μˆ˜ val1은 아직 μ„ μ–Έλ˜κΈ° 전이닀.
μ›λž˜λŒ€λ‘œλΌλ©΄ μžλ°”μŠ€ν¬λ¦½νŠΈ μ½”λ“œλŠ” 순차적으둜 μœ„μ—μ„œ μ•„λž˜λ‘œ μ‹€ν–‰λ˜κΈ° λ•Œλ¬Έμ— μ°Έμ‘°ν•  수 μ—†λ‹€λŠ” μ—λŸ¬κ°€ 뜰 것이닀.

console.log(vall);
var vall;
undefined
undefined

ν•˜μ§€λ§Œ κ²°κ³Όμ μœΌλ‘œλŠ” undefinedκ°€ λœ¬λ‹€.
μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진이 λ³€μˆ˜ μ„ μ–Έ μ½”λ“œλŠ” 어디에 μžˆλ“  κ°€μž₯ λ¨Όμ € μ‹€ν–‰μ‹œν‚€κΈ° λ•Œλ¬Έμ΄λ‹€. 그리고 κ·Έ 후에 λ‹€μ‹œ 순차적으둜 μ½”λ“œλ₯Ό μ‹€ν–‰μ‹œν‚¨λ‹€.

μ΄λ ‡κ²Œ λ³€μˆ˜ 선언문이 λ‹€λ₯Έ μ½”λ“œλ“€λ³΄λ‹€ μœ„λ‘œ λŒμ–΄μ˜¬λ €μ Έ λ¨Όμ € μ‹€ν–‰λ˜λŠ” 것을 λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ…μ΄λΌκ³  ν•œλ‹€.

[Reference] https://www.youtube.com/watch?v=vMsK5f_0938