2 λΆ„ μ†Œμš”

μ»΄ν“¨ν„°λŠ” CPUλ₯Ό μ‚¬μš©ν•˜μ—¬ 연산을 ν•˜κ³  λ©”λͺ¨λ¦¬λ₯Ό μ‚¬μš©ν•˜μ—¬ 데이터λ₯Ό 기얡을 ν•œλ‹€.

λ©”λͺ¨λ¦¬λŠ” 데이터λ₯Ό μ €μž₯ν•  수 μžˆλŠ” λ©”λͺ¨λ¦¬ μ…€μ˜ 집합체닀. λ©”λͺ¨λ¦¬ μ…€ ν•˜λ‚˜μ˜ ν¬κΈ°λŠ” 1λ°”μ΄νŠΈ(8λΉ„νŠΈ)이며, μ»΄ν“¨ν„°λŠ” λ©”λͺ¨λ¦¬ μ…€μ˜ 크기, 즉 1λ°”μ΄νŠΈ λ‹¨μœ„λ‘œ 데이터λ₯Ό μ €μž₯ν•˜κ±°λ‚˜ 읽어듀인닀.

λ©”λͺ¨λ¦¬ 곡간에 μ €μž₯된 값을 식별할 수 μžˆλŠ” κ³ μœ ν•œ 이름을 λ³€μˆ˜μ΄λ¦„(λ³€μˆ˜λͺ…)이라고 ν•œλ‹€.

λ³€μˆ˜μ— 값을 μ €μž₯ν•˜λŠ” 것을 ν• λ‹Ήμ΄λΌν•˜κ³ , λ³€μˆ˜μ— μ €μž₯된 값을 읽어 λ“€μ΄λŠ” 것을 참쑰라고 ν•œλ‹€.

λ³€μˆ˜ 이름을 μ‹λ³„μžλΌκ³ λ„ ν•œλ‹€. μ‹λ³„μžλŠ” μ–΄λ–€ 값을 κ΅¬λ³„ν•΄μ„œ 식별할 수 μžˆλŠ” κ³ μœ ν•œ 이름을 λ§ν•œλ‹€.

μ‹λ³„μžλŠ” 값이 μ €μž₯λ˜μ–΄ μžˆλŠ” λ©”λͺ¨λ¦¬ μ£Όμ†Œμ™€ 맀핑 관계λ₯Ό 맺으며, 이 맀핑 정보도 λ©”λͺ¨λ¦¬μ— μ €μž₯λ˜μ–΄μ•Ό ν•œλ‹€. 이처럼 μ‹λ³„μžλŠ” 값이 μ•„λ‹ˆλΌ λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό κΈ°μ–΅ν•˜κ³  μžˆλ‹€. μ‹λ³„μžλ‘œ 값을 κ΅¬λ³„ν•΄μ„œ μ‹λ³„ν•œλ‹€λŠ” 것은 μ‹λ³„μžκ°€ κΈ°μ–΅ν•˜κ³  μžˆλŠ” λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό 톡해 λ©”λͺ¨λ¦¬ 곡간에 μ €μž₯된 값에 μ ‘κ·Όν•  수 μžˆλ‹€λŠ” μ˜λ―Έμ΄λ‹€. 즉, μ‹λ³„μžλŠ” λ©”λͺ¨λ¦¬ μ£Όμ†Œμ— 뢙인 이름이라고 ν•  수 μžˆλ‹€. μ‹λ³„μžλΌλŠ” μš©μ–΄λŠ” λ³€μˆ˜μ΄λ¦„μ—λ§Œ κ΅­ν•œν•΄μ„œ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€. 예λ₯Ό λ“€μ–΄, ν•¨μˆ˜, λ³€μˆ˜,클래슀 λ“±μ˜ 이름은 λͺ¨λ‘ μ‹λ³„μžλ‹€. μ‹λ³„μžμΈ λ³€μˆ˜ μ΄λ¦„μœΌλ‘œλŠ” λ©”λͺ¨λ¦¬ 상에 μ‘΄μž¬ν•˜λŠ” λ³€μˆ˜ 값을 식별할 수 있고, ν•¨μˆ˜ μ΄λ¦„μœΌλ‘œλŠ” λ©”λͺ¨λ¦¬ 상에 μ‘΄μž¬ν•˜λŠ” ν•¨μˆ˜(μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ ν•¨μˆ˜λŠ” 값이닀.)λ₯Ό 식별할 수 μžˆλ‹€. 즉, λ©”λͺ¨λ¦¬μ— μ‘΄μž¬ν•˜λŠ” μ–΄λ–€ 값을 식별할 수 μžˆλŠ” 이름은 λͺ¨λ‘ μ‹λ³„μžλΌκ³  λΆ€λ₯Έλ‹€.

λ³€μˆ˜ μ„ μ–Έμ΄λž€ λ³€μˆ˜λ₯Ό μƒμ„±ν•˜λŠ” 것을 λ§ν•œλ‹€. μ’€ 더 μžμ„Ένžˆ λ§ν•˜λ©΄ 값을 μ €μž₯ν•˜κΈ° μœ„ν•œ λ©”λͺ¨λ¦¬ 곡간을 ν™•λ³΄ν•˜κ³  λ³€μˆ˜ 이름과 ν™•λ³΄λœ λ©”λͺ¨λ¦¬ κ³΅κ°„μ˜ μ£Όμ†Œλ₯Ό μ—°κ²°ν•΄μ„œ 값을 μ €μž₯ν•  수 있게 μ€€λΉ„ν•˜λŠ” 것이닀.

  • λ³€μˆ˜ 이름은 어디에 λ“±λ‘λ˜λŠ”κ°€?
    • λ³€μˆ˜ 이름을 λΉ„λ‘―ν•œ λͺ¨λ“  μ‹λ³„μžλŠ” μ‹€ν–‰ μ»¨ν…μŠ€νŠΈμ— λ“±λ‘λœλ‹€.μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλŠ” μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진이 μ†ŒμŠ€μ½”λ“œλ₯Ό ν‰κ°€ν•˜κ³  μ‹€ν–‰ν•˜κΈ° μœ„ν•΄ ν•„μš”ν•œ ν™˜κ²½μ„ μ œκ³΅ν•˜κ³  μ½”λ“œμ˜ μ‹€ν–‰κ²°κ³Όλ₯Ό μ‹€μ œλ‘œ κ΄€λ¦¬ν•˜λŠ” μ˜μ—­μ΄λ‹€. μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진은 μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλ₯Ό 톡해 μ‹λ³„μžμ™€ μŠ€μ½”ν”„λ₯Ό κ΄€λ¦¬ν•œλ‹€. λ³€μˆ˜μ΄λ¦„κ³Ό λ³€μˆ˜ 값은 μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ 내에 ν‚€/κ°’ ν˜•μ‹μΈ 객체둜 λ“±λ‘λ˜μ–΄ κ΄€λ¦¬λœλ‹€.

λ³€μˆ˜ μ„ μ–Έμ˜ μ‹€ν–‰ μ‹œμ κ³Ό λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ…


console.log(score); //undefinded

var score; // λ³€μˆ˜ μ„ μ–Έλ¬Έ

κ²°κ³ΌλŠ” μ°Έμ‘° μ—λŸ¬κ°€ λ°œμƒν•˜μ§€ μ•Šκ³  undefinedκ°€ 좜λ ₯λœλ‹€.

κ·Έ μ΄μœ λŠ” λ³€μˆ˜ 선언이 μ†ŒμŠ€μ½”λ“œκ°€ ν•œ 쀄씩 순차적으둜 μ‹€ν–‰λ˜λŠ” μ‹œμ . 즉 λŸ°νƒ€μž„μ΄ μ•„λ‹ˆλΌ κ·Έ 이전 λ‹¨κ³„μ—μ„œ λ¨Όμ € μ‹€ν–‰λ˜κΈ° λ•Œλ¬Έμ΄λ‹€.

μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진은 μ†ŒμŠ€μ½”λ“œλ₯Ό ν•œ 쀄씩 순차적으둜 μ‹€ν–‰ν•˜κΈ°μ— μ•žμ„œ λ¨Όμ € μ†ŒμŠ€μ½”λ“œμ˜ 평가과정을 κ±°μΉ˜λ©΄μ„œ μ†ŒμŠ€μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜κΈ° μœ„ν•œ μ€€λΉ„λ₯Ό ν•œλ‹€. μ΄λ•Œ μ†ŒμŠ€ μ½”λ“œ 싀행을 μœ„ν•œ μ€€λΉ„ 단계인 μ†ŒμŠ€μ½”λ“œμ˜ 평가 κ³Όμ •μ—μ„œ μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진은 λ³€μˆ˜ 선언을 ν¬ν•¨ν•œ λͺ¨λ“  μ„ μ–Έλ¬Έ(λ³€μˆ˜ μ„ μ–Έλ¬Έ, ν•¨μˆ˜ μ„ μ–Έλ¬Έ λ“±)을 μ†ŒμŠ€μ½”λ“œμ—μ„œ μ°Ύμ•„μ„œ λ¨Όμ € μ‹€ν–‰ν•œλ‹€. 그리고 μ†ŒμŠ€μ½”λ“œμ˜ 평가 과정이 λλ‚˜λ©΄ λΉ„λ‘œμ†Œ λ³€μˆ˜ 선언을 ν¬ν•¨ν•œ λͺ¨λ“  선언문을 μ œμ™Έν•˜κ³  μ†ŒμŠ€μ½”λ“œλ₯Ό ν•œ 쀄씩 순차적으둜 μ‹€ν–‰ν•œλ‹€.

즉, μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진은 λ³€μˆ˜ 선언이 μ†ŒμŠ€μ½”λ“œμ˜ 어디에 μžˆλ“  상관없이 λ‹€λ₯Έ μ½”λ“œλ³΄λ‹€ λ¨Όμ € μ‹€ν–‰ν•œλ‹€.

이처럼 λ³€μˆ˜ 선언문이 μ½”λ“œμ˜ μ„ λ‘λ‘œ λŒμ–΄ μ˜¬λ €μ§„ κ²ƒμ²˜λŸΌ λ™μž‘ν•˜λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈ 고유의 νŠΉμ§•μ„ λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ…μ΄λΌ ν•œλ‹€.

사싀 λ³€μˆ˜ 선언뿐 μ•„λ‹ˆλΌ var, let, const, function, function*, class ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•΄μ„œ μ„ μ–Έν•˜λŠ” λͺ¨λ“ μ‹λ³„μž(λ³€μˆ˜, ν•¨μˆ˜, 클래슀 λ“±)λŠ” ν˜Έμ΄μŠ€νŒ…λœλ‹€. λͺ¨λ“  선언문은 λŸ°νƒ€μž„ 이전 λ‹¨κ³„μ—μ„œ λ¨Όμ € μ‹€ν–‰λ˜κΈ° λ•Œλ¬Έμ΄λ‹€.

μ—¬κΈ°μ„œ κ°’μ˜ 할당은 μ†ŒμŠ€μ½”λ“œκ°€ 순차적으둜 μ‹€ν–‰λ˜λŠ” μ‹œμ μΈ λŸ°νƒ€μž„μ— μ‹€ν–‰λœλ‹€.

예λ₯Όλ“€μ–΄

  console.log(score); //undefined

  var score=80; //λ³€μˆ˜ μ„ μ–Έκ³Ό κ°’μ˜ ν• λ‹ΉμœΌλ‘œ λ‚˜λˆ„μ–΄μ§. 
                //var score; score=80;κ³Ό μ •ν™•νžˆ 같은 μ†ŒμŠ€

  console.log(score); //80

λ³€μˆ˜μ— 값을 ν• λ‹Ήν•  λ•ŒλŠ” 이전 κ°’ undefinedκ°€ μ €μž₯λ˜μ–΄ 있던 λ©”λͺ¨λ¦¬ 곡간을 μ§€μš°κ³  κ·Έ λ©”λͺ¨λ¦¬ 곡간에 ν• λ‹Ή κ°’ 80을 μƒˆλ‘­κ²Œ μ €μž₯ν•˜λŠ” 것이 μ•„λ‹ˆλΌ μƒˆλ‘œμš΄ λ©”λͺ¨λ¦¬ 곡간을 ν™•λ³΄ν•˜κ³  그곳에 λž„λ‹Ή κ°’ 80을 μ €μž₯ν•œλ‹€λŠ” 점에 μ£Όμ˜ν•˜μž. -> μ™„μ „ μ²˜μŒμ•Œκ²Œλœ 사싀!!

κ°’μ˜ μž¬ν• λ‹Ή


  var score=80;
  score= 90;

처음 값을 ν• λ‹Ήν–ˆμ„ λ•Œμ™€ λ§ˆμ°¬κ°€μ§€λ‘œ 이전 κ°’ 80이 μ €μž₯λ˜μ–΄ 있던 λ©”λͺ¨λ¦¬ 곡간을 μ§€μš°κ³  κ·Έ λ©”λͺ¨λ¦¬ 곡간에 μž¬ν• λ‹Ή κ°’ 90을 μƒˆλ‘­κ²Œ μ €μž₯ν•˜λŠ” 것이 μ•„λ‹ˆλΌ μƒˆλ‘œμš΄ λ©”λͺ¨λ¦¬ 곡간을 ν™•λ³΄ν•˜κ³  κ·Έ λ©”λͺ¨λ¦¬ 곡간에 숫자 κ°’ 90을 μ €μž₯ν•œλ‹€.

score λ³€μˆ˜μ˜ 이전 값인 undefined와 80은 μ–΄λ–€ λ³€μˆ˜λ„ κ°’μœΌλ‘œ κ°–κ³  μžˆμ§€ μ•Šκ³  κ°’λ§Œ λ©”λͺ¨λ¦¬μ— μžˆλ‹€. 즉 μ–΄λ–€ μ‹λ³„μžμ™€λ„ μ—°κ²°λ˜μ–΄ μžˆμ§€ μ•Šλ‹€. 이처럼 λΆˆν•„μš”ν•œ 값듀은 가비지 μ½œλ ‰ν„°μ— μ˜ν•΄ λ©”λͺ¨λ¦¬κ°€ μžλ™ ν•΄μ œλœλ‹€. 단, λ©”λͺ¨λ¦¬μ—μ„œ μ–Έμ œ ν•΄μ²΄λ μ§€λŠ” μ˜ˆμΈ‘ν•  수 μ—†λ‹€.

λŒ“κΈ€λ‚¨κΈ°κΈ°