πŸ“‹ λͺ¨λ˜ μžλ°”μŠ€ν¬λ¦½νŠΈ Deep Dive | 4μž₯ λ³€μˆ˜ ~ 5μž₯ ν‘œν˜„μ‹κ³Ό λ¬Έ

waterglassesΒ·2022λ…„ 10μ›” 1일
0
post-thumbnail

λͺ¨λ˜ μžλ°”μŠ€ν¬λ¦½νŠΈ Deep Dive λ„μ„œμ˜ 4μž₯ λ³€μˆ˜μ™€ 5μž₯ ν‘œν˜„μ‹κ³Ό 문을 μ •λ¦¬ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

4μž₯ λ³€μˆ˜

4.1 λ³€μˆ˜λž€ 무엇인가? μ™œ ν•„μš”ν•œκ°€?

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

λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό 톡해 값에 직접 μ ‘κ·Όν•˜λŠ” 것은 치λͺ…적 였λ₯˜λ₯Ό λ°œμƒμ‹œν‚¬ κ°€λŠ₯성이 맀우 λ†’λ‹€. λ”°λΌμ„œ μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” 개발자의 직접적인 λ©”λͺ¨λ¦¬ μ œμ–΄λ₯Ό ν—ˆμš©ν•˜μ§€ μ•ŠλŠ”λ‹€.

λ³€μˆ˜λŠ” ν•˜λ‚˜μ˜ 값을 μ €μž₯ν•˜κΈ° μœ„ν•΄ ν™•λ³΄ν•œ λ©”λͺ¨λ¦¬ 곡간 자체 λ˜λŠ” κ·Έ λ©”λͺ¨λ¦¬ 곡간을 μ‹λ³„ν•˜κΈ° μœ„ν•΄ 뢙인 이름을 λ§ν•œλ‹€. 즉, 값을 μœ„μΉ˜λ₯Ό κ°€λ¦¬ν‚€λŠ” 상징적인 이름이닀.

λ”°λΌμ„œ κ°œλ°œμžκ°€ 직접 λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό 톡해 값을 μ €μž₯ν•˜κ³  μ°Έμ‘°ν•  ν•„μš”κ°€ μ—†κ³  λ³€μˆ˜λ₯Ό 톡해 μ•ˆμ „ν•˜κ²Œ 값에 μ ‘κ·Όν•  수 μžˆλ‹€. λ©”λͺ¨λ¦¬ 곡간에 μ €μž₯된 갓을 λ‹€μ‹œ 읽어 μž¬μ‚¬μš©ν•  수 μžˆλ„λ‘ 값이 μ €μž₯된 λ©”λͺ¨λ¦¬ 곡간에 상징적인 이름을 뢙인 것이닀.

4.2 μ‹λ³„μž

λ³€μˆ˜ 이름을 μ‹λ³„μžλΌκ³ λ„ ν•œλ‹€. μ‹λ³„μžλŠ” μ–΄λ–€ 값을 κ΅¬λ³„ν•΄μ„œ 식별할 수 μžˆλŠ” κ³ μœ ν•œ 이름을 λ§ν•œλ‹€. λ˜ν•œ 값이 μ•„λ‹ˆλΌ λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό κΈ°μ–΅ν•˜κ³  μžˆλ‹€. 즉, μ‹λ³„μžλŠ” λ©”λͺ¨λ¦¬ μ£Όμ†Œμ— 뢙인 이름이라고 ν•  수 μžˆλ‹€.

4.3 λ³€μˆ˜ μ„ μ–Έ

λ³€μˆ˜ μ„ μ–Έμ΄λž€ λ³€μˆ˜λ₯Ό μƒμ„±ν•˜λŠ” 것을 λ§ν•œλ‹€. λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜λ €λ©΄ λ°˜λ“œμ‹œ 선언이 ν•„μš”ν•˜λ‹€. var, let, const ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•œλ‹€.

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

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

λ³€μˆ˜ 생성 κ³Όμ •

  • μ„ μ–Έ : μŠ€μ½”ν”„μ— λ³€μˆ˜λ₯Ό μ„ μ–Έν•œλ‹€.
  • μ΄ˆκΈ°ν™” : λ³€μˆ˜μ˜ 값을 undefined둜 μ΄ˆκΈ°ν™”ν•˜λ©°, μ‹€μ œλ‘œ λ³€μˆ˜μ— μ ‘κ·Ό κ°€λŠ₯ν•œ 단계이닀.
  • ν• λ‹Ή : 할당문을 λ§Œλ‚˜λ©΄ λ³€μˆ˜μ— μ‹€μ œ 값을 ν• λ‹Ήν•œλ‹€.

varκ³Ό let, constμ—μ„œμ˜ λ³€μˆ˜ 생성 κ³Όμ •

var

  • μ„ μ–Έκ³Ό μ΄ˆκΈ°ν™” 단계λ₯Ό ν•œ λ²ˆμ— μ‹€ν–‰ν•˜κΈ° λ•Œλ¬Έμ— μ„ μ–Έ 전에 λ³€μˆ˜κ°€ μ ‘κ·Όν•˜μ—¬λ„ 이미 μ΄ˆκΈ°ν™”κ°€ λ˜μ–΄ 접근이 κ°€λŠ₯ν•˜λ‹€.

letκ³Ό const

  • μ„ μ–Έ λ‹¨κ³„λŠ” μŠ€μ½”ν”„μ˜ μ΅œμƒλ‹¨μœΌλ‘œ λŒμ–΄μ˜¬λ €μ Έ μ‹€ν–‰λ˜μ§€λ§Œ, μ΄ˆκΈ°ν™” λ‹¨κ³„λŠ” 선언문을 λ§Œλ‚˜λ©΄ μ‹€ν–‰λœλ‹€.
  • μ΄ˆκΈ°ν™” 이전에 λ³€μˆ˜μ— μ ‘κ·Όν•˜λ €κ³  ν•˜λ©΄ ReferenceErrorκ°€ λ°œμƒν•œλ‹€.
  • μ„ μ–Έ 단계가 μ‹€ν–‰λ˜λŠ” μŠ€μ½”ν”„μ˜ μ΅œμƒλ‹¨λΆ€ν„° μ˜€κΈ°ν™” 단계λ₯Ό μ‹€ν–‰ν•˜λŠ” 선언문이 λ‚˜μ˜€κΈ° μ „κΉŒμ§€λŠ” λ³€μˆ˜μ— μ ‘κ·Όν•  수 μ—†λ‹€. 이 ꡬ간을 Temporal Dead Zone(TDZ)라 λΆ€λ₯Έλ‹€.

4.5 κ°’μ˜ ν• λ‹Ή

λ³€μˆ˜ 선언은 μ†ŒμŠ€ μ½”λ“œκ°€ 순차적으둜 μ‹€ν–‰λ˜λŠ” μ‹œμ μΈ λŸ°νƒ€μž„ 이전에 μ‹€ν–‰λ˜μ§€λ§Œ κ°’μ˜ 할당은 μ†ŒμŠ€μ½”λ“œκ°€ 순차적으둜 μ‹€ν–‰λ˜λŠ” μ‹œμ μΈ λŸ°νƒ€μž„μ— μ‹€ν–‰λœλ‹€.

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

값을 μž¬ν• λ‹Ήν•  수 μ—†μ–΄μ„œ λ³€μˆ˜μ— μ €μž₯된 값을 λ³€κ²½ν•  수 μ—†λ‹€λ©΄ λ³€μˆ˜κ°€ μ•„λ‹ˆλΌ μƒμˆ˜λΌ ν•œλ‹€. ES6μ—μ„œ λ„μž…λœ constλ₯Ό μ‚¬μš©ν•΄ μ„ μ–Έν•œ λ³€μˆ˜λŠ” μž¬ν• λ‹Ήμ΄ κΈˆμ§€λœλ‹€.

λ³€μˆ˜μ— 값을 μž¬ν• λ‹Ή ν•˜λ©΄ 이전에 μ €μž₯λ˜μ–΄μžˆλ˜ λ©”λͺ¨λ¦¬μ— μ €μž₯ν•˜λŠ” 것이 μ•„λ‹ˆλΌ μƒˆλ‘œμš΄ λ©”λͺ¨λ¦¬ 곡간을 ν™•λ³΄ν•˜κ³  κ·Έ λ©”λͺ¨λ¦¬ 곡간에 μ €μž₯ν•œλ‹€.

λ˜ν•œ 아무도 μ‚¬μš©ν•˜κ³  μžˆμ§€ μ•Šμ€ λ©”λͺ¨λ¦¬μ˜ 값듀은 가비지 μ½œλ ‰ν„°μ— μ˜ν—€ λ©”λͺ¨λ¦¬μ—μ„œ μžλ™ ν•΄μ œλœλ‹€. 단, λ©”λͺ¨λ¦¬μ—μ„œ μ–Έμ œ ν•΄μ œλ μ§€λŠ” μ˜ˆμΈ‘ν•  수 μ—†λ‹€.

4.7 μ‹λ³„μž 넀이밍 κ·œμΉ™

μ‹λ³„μžμ˜ 넀이밍 κ·œμΉ™

  • μ‹λ³„μžλŠ” 특수문자λ₯Ό μ œμ™Έν•œ 문자, 숫자, _, $ λ₯Ό 포함할 수 μžˆλ‹€.
  • 단, μ‹λ³„μžλŠ” 특수문자λ₯Ό μ œμ™Έν•œ 문자, _, $ 둜 μ‹œμž‘ν•΄μ•Όν•œλ‹€. 숫자둜 μ‹œμž‘ν•  수 μ—†λ‹€.
  • μ˜ˆμ•½μ–΄λŠ” μ‹λ³„μžλ‘œ μ‚¬μš©ν•  수 μ—†λ‹€.
  • μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” λŒ€μ†Œλ¬Έμžλ₯Ό κ΅¬λΆ„ν•œλ‹€.

5μž₯ ν‘œν˜„μ‹κ³Ό λ¬Έ

5.1 κ°’

값은 식이 ν‰κ°€λ˜μ–΄ μƒμ„±λœ κ²°κ³Όλ₯Ό λ§ν•œλ‹€. λ³€μˆ˜μ— ν• λ‹Ήλ˜λŠ” 것은 값이닀.

5.2 λ¦¬ν„°λŸ΄

λ¦¬ν„°λŸ΄μ€ μ‚¬λžŒμ΄ 이해할 수 μžˆλŠ” 문자 λ˜λŠ” μ•½μ†λœ 기호λ₯Ό μ‚¬μš©ν•΄ 값을 μƒμ„±ν•˜λŠ” ν‘œκΈ°λ²•μ„ λ§ν•œλ‹€.

즉 λ¦¬ν„°λŸ΄μ€ 값을 μƒμ„±ν•˜κΈ° μœ„ν•΄ 미리 μ•½μ†ν•œ ν‘œκΈ°λ²•μ΄λΌκ³  ν•  수 μžˆλ‹€.

ex)
μ •μˆ˜ λ¦¬ν„°λŸ΄ : 100
8μ§„μˆ˜ λ¦¬ν„°λŸ΄ 0x41
λ°°μ—΄ λ¦¬ν„°λŸ΄ : [1, 2, 3]

5.3 ν‘œν˜„μ‹

ν‘œν˜„μ‹μ€ κ°’μœΌλ‘œ 평가될 수 μžˆλŠ” 문이닀. 즉, ν‘œν˜„μ‹μ΄ ν‰κ°€λ˜λ©΄ μƒˆλ‘œμš΄ 값을 μƒμ„±ν•˜κ±°λ‚˜ κΈ°μ‘΄ 값을 μ°Έμ‘°ν•œλ‹€.

var score = 100; // ν‘œν˜„μ‹

score; // 100 -> μ‹λ³„μž μ°Έμ‘°λŠ” 값을 μƒμ„±ν•˜μ§€λŠ” μ•Šμ§€λ§Œ κ°’μœΌλ‘œ ν‰κ°€λ˜λ―€λ‘œ ν‘œν˜„μ‹μ΄λ‹€.

즉, κ°’μœΌλ‘œ 평가될 수 μžˆλŠ” λͺ¨λ“  문은 λͺ¨λ‘ ν‘œν˜„μ‹μ΄λ‹€.

5.4 λ¬Έ

문은 ν”„λ‘œκ·Έλž¨μ„ κ΅¬μ„±ν•˜λŠ” κΈ°λ³Έ λ‹¨μœ„μ΄μž μ΅œμ†Œ μ‹€ν–‰ λ‹¨μœ„μ΄λ‹€.

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

x = 5; // ν• λ‹Ήλ¬Έ 

function foo () {} // ν•¨μˆ˜ μ„ μ–Έλ¬Έ

if (x > 1) { // 쑰건문
  console.log(x);
}

5.5 μ„Έλ―Έμ½œλ‘ κ³Ό μ„Έλ―Έμ½œλ‘  μžλ™ μ‚½μž… κΈ°λŠ₯

μ„Έλ―Έμ½œλ‘ μ€ 문의 μ’…λ£Œλ₯Ό λ‚˜νƒ€λ‚Έλ‹€. 문의 끝에 λΆ™μ΄λŠ” μ„Έλ―Έμ½œλ‘ μ€ μƒλž΅ κ°€λŠ₯ν•˜λ‹€.
μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진이 μ†ŒμŠ€μ½”λ“œλ₯Ό 해석 ν•  λ•Œ 문의 끝이라고 μ˜ˆμΈ‘λ˜λŠ” 지점에 μ„Έλ―Έμ½œλ‘ μ„ μžλ™μœΌλ‘œ λΆ™μ—¬μ€€λŠ” μ„Έλ―Έμ½œλ‘  μžλ™ μ‚½μž… κΈ°λŠ₯이 μ•”λ¬΅μ μœΌλ‘œ μˆ˜ν–‰λœλ‹€.

5.6 ν‘œν˜„μ‹μΈ λ¬Έκ³Ό ν‘œν˜„μ‹μ΄ μ•„λ‹Œ λ¬Έ

ν‘œν˜„μ‹μΈ λ¬Έκ³Ό ν‘œν˜„μ‹μ΄ μ•„λ‹Œ 문을 κ΅¬λ³„ν•˜λŠ” κ°€μž₯ κ°„λ‹¨ν•˜κ³  λͺ…λ£Œν•œ 방법은 λ³€μˆ˜μ— ν• λ‹Ήν•΄ λ³΄λŠ” 것이닀.

ν‘œν˜„μ‹μΈ 문은 κ°’μœΌλ‘œ ν‰κ°€λ˜λ―€λ‘œ λ³€μˆ˜μ— ν• λ‹Ήν•  수 μžˆλ‹€.

var foo = x = 100;
console.log(foo); // 100

Ref

  • 이웅λͺ¨ μ €, ⌜λͺ¨λ˜ μžλ°”μŠ€ν¬λ¦½νŠΈ Deep Dive⌟, μœ„ν‚€λΆμŠ€
profile
맀 μˆœκ°„ μ„±μž₯ν•˜λŠ” κ°œλ°œμžκ°€ 되렀고 λ…Έλ ₯ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

0개의 λŒ“κΈ€