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

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

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

각 셀은 고유의 λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό κ°–λŠ”λ‹€. 컴퓨터가 κ³„μ‚°ν•˜λŠ” 숫자 κ°’(2μ§„μˆ˜)은 λ©”λͺ¨λ¦¬ μƒμ˜ μž„μ˜μ˜ μœ„μΉ˜μ— μ €μž₯되고 CPUλŠ” 이 값을 읽어듀여 연산을 μˆ˜ν–‰ν•˜λŠ”λ° 이 λ•Œ CPUκ°€ μ—°μ‚°ν•΄μ„œ λ§Œλ“€μ–΄μ§„ 값은 λ©”λͺ¨λ¦¬μƒμ— μ €μž₯λ˜μ–΄μžˆμ§€λ§Œ μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” λ©”λͺ¨λ¦¬ μ£Όμ†Œκ°’μ— μ§μ ‘μ μœΌλ‘œ μ ‘κ·Όν• μˆ˜κ°€ μ—†λ‹€. κ·ΈλŸ¬λ―€λ‘œ μš°λ¦¬λŠ” λ³€μˆ˜λ₯Ό μ‚¬μš©ν•΄ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—μ„œ 값을 μ €μž₯ν•˜κ³  μ°Έμ‘°ν•œλ‹€.

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

4.2 μ‹λ³„μž

λ³€μˆ˜ 이름은 μ‹λ³„μž 라고도 ν•˜λŠ”λ°, μ‹λ³„μžλŠ” μ–΄λ–€ 값을 κ΅¬λ³„ν•΄μ„œ 식별할 수 μžˆλŠ” κ³ μœ ν•œ 이름을 λ§ν•œλ‹€.

μ‹λ³„μžλŠ” 값이 μ•„λ‹ˆλΌ λ©”λͺ¨λ¦¬μ˜ μ£Όμ†Œλ₯Ό κΈ°μ–΅ν•˜κ³  μžˆλŠ”κ²ƒμ΄λ‹€.

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

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

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

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

μœ„ λ³€μˆ˜ 선언문은 λ³€μˆ˜ 이름을 λ“±λ‘ν•˜κ³  값을 μ €μž₯ν•  λ©”λͺ¨λ¦¬ 곡간을 ν™•λ³΄ν•œλ‹€. λ³€μˆ˜λ₯Ό μ„ μ–Έν•œ 이후, λ³€μˆ˜μ— 값을 ν• λ‹Ήν•˜μ§€ μ•Šμ•˜μ§€λ§Œ ν™•λ³΄λœ λ©”λͺ¨λ¦¬ κ³΅κ°„μ—λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진에 μ˜ν•΄ undefinedλΌλŠ” 값이 μ•”λ¬΅μ μœΌλ‘œ ν• λ‹Ήλ˜μ–΄ μ΄ˆκΈ°ν™”λœλ‹€.

λ³€μˆ˜ 이름을 λΉ„λ‘―ν•œ λͺ¨λ“  μ‹λ³„μžλŠ” μ‹€ν–‰ μ»¨ν…μŠ€νŠΈμ— λ“±λ‘λœλ‹€.

🧐 μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλž€?

μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진이 μ†ŒμŠ€μ½”λ“œλ₯Ό ν‰κ°€ν•˜κ³  μ‹€ν–‰ν•˜κΈ° μœ„ν•΄ ν•„μš”ν•œ ν™˜κ²½μ„ μ œκ³΅ν•˜κ³  μ½”λ“œμ˜ μ‹€ν–‰ κ²°κ³Όλ₯Ό μ‹€μ œλ‘œ κ΄€λ¦¬ν•˜λŠ” μ˜μ—­μ΄λ‹€.


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

μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진은 μ†ŒμŠ€μ½”λ“œλ₯Ό ν•œ 쀄씩 순차적으둜 μ‹€ν–‰ν•˜κΈ°μ— μ•žμ„œ λ¨Όμ € μ†ŒμŠ€μ½”λ“œμ˜ 평가 과정을 κ±°μ³μ„œ μ†ŒμŠ€μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜κΈ° μœ„ν•œ μ€€λΉ„λ₯Ό ν•œλ‹€.

이 λ•Œ 평가 κ³Όμ •μ—μ„œ μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진은 λͺ¨λ“  선언문을 μ†ŒμŠ€μ½”λ“œμ—μ„œ μ°Ύμ•„λ‚΄ λ¨Όμ € μ‹€ν–‰ν•˜κ³  평가 과정이 λλ‚˜κ²Œ 되면 λ³€μˆ˜ 선언을 ν¬ν•¨ν•œ λͺ¨λ“  선언문을 μ œμ™Έν•˜κ³  μ†ŒμŠ€μ½”λ“œλ₯Ό ν•œ 쀄씩 순차적으둜 μ‹€ν–‰ν•œλ‹€.

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


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

λ³€μˆ˜μ— 값을 ν• λ‹Ήν•  λ•ŒλŠ” λŒ€μž… μ—°μ‚°μž = 을 μ‚¬μš©ν•œλ‹€.

λ³€μˆ˜ μ„ μ–Έκ³Ό 할당을 ν•˜λ‚˜μ˜ λ¬Έμž₯으둜 단좕할 수 μžˆλ‹€. ν•˜μ§€λ§Œ λ³€μˆ˜ 선언은 μ†ŒμŠ€μ½”λ“œκ°€ 순차적으둜 μ‹€ν–‰λ˜λŠ” μ‹œμ μΈ λŸ°νƒ€μž„ 이전에 λ¨Όμ € μ‹€ν–‰λ˜μ§€λ§Œ, κ°’μ˜ 할당은 μ†ŒμŠ€μ½”λ“œκ°€ 순차적으둜 μ‹€ν–‰λ˜λŠ” μ‹œμ μΈ λŸ°νƒ€μž„μ— μ‹€ν–‰λœλ‹€.

  console.log(score);        // undefined
  var score = 80;        // λ³€μˆ˜ μ„ μ–Έκ³Ό κ°’μ˜ ν• λ‹Ή
  console.log(score);        // 80

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


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

μž¬ν• λ‹Ήμ΄λž€ 이미 값이 ν• λ‹Ήλ˜μ–΄ μžˆλŠ” λ³€μˆ˜μ— μƒˆλ‘œμš΄ 값을 또 λ‹€μ‹œ ν• λ‹Ήν•˜λŠ” 것을 λ§ν•œλ‹€.

var ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ λ³€μˆ˜λŠ” 값을 μž¬ν• λ‹Ήν•  수 μžˆλ‹€. μ—„λ°€νžˆ λ§ν•˜μžλ©΄ var ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ λ³€μˆ˜λŠ” μ„ μ–Έκ³Ό λ™μ‹œμ— undefined둜 μ΄ˆκΈ°ν™” λ˜κΈ°λ•Œλ¬Έμ— λ³€μˆ˜μ— 처음으둜 값을 ν• λ‹Ήν•˜λŠ” 것도 사싀은 μž¬ν• λ‹Ήμ΄λ‹€.

λ§Œμ•½ 값을 μž¬ν• λ‹Ήν•  수 μ—†μ–΄μ„œ λ³€μˆ˜μ— μ €μž₯된 값을 λ³€κ²½ν•  수 μ—†λ‹€λ©΄ λ³€μˆ˜κ°€ μ•„λ‹ˆλΌ μƒμˆ˜(constant) 라고 ν•œλ‹€.
score λ³€μˆ˜ 이전 값인 undefined와 80은 μ–΄λ–€ μ‹λ³„μžμ™€λ„ μ—°κ²°λ˜μ–΄ μžˆμ§€ μ•ŠμœΌλ―€λ‘œ λΆˆν•„μš”ν•œ 값이 λ˜μ–΄λ²„λ¦¬λŠ”λ° 이 값듀은 가비지 μ½œλ ‰ν„°μ— μ˜ν•΄ λ©”λͺ¨λ¦¬μ—μ„œ μžλ™ ν•΄μ œλœλ‹€. 단, μ–Έμ œ ν•΄μ œλ μ§€λŠ” μ˜ˆμΈ‘ν•  수 μ—†λ‹€.

🧐 가비지 μ½œλ ‰ν„°λž€?

μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ ν• λ‹Ήν•œ λ©”λͺ¨λ¦¬ 곡간을 주기적으둜 κ²€μ‚¬ν•˜μ—¬ 더이상 μ‚¬μš©λ˜μ§€ μ•ŠλŠ” λ©”λͺ¨λ¦¬λ₯Ό ν•΄μ œν•˜λŠ” κΈ°λŠ₯을 λ§ν•œλ‹€.. 더 이상 μ‚¬μš©λ˜μ§€ μ•ŠλŠ” λ©”λͺ¨λ¦¬λž€ κ°„λ‹¨νžˆ λ§ν•˜μžλ©΄ μ–΄λ–€ μ‹λ³„μžλ„ μ°Έμ‘°ν•˜μ§€ μ•ŠλŠ” λ©”λͺ¨λ¦¬ 곡간을 μ˜λ―Έν•œλ‹€. μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” κ°€λΉ„μ§€μ½œλ ‰ν„°λ₯Ό λ‚΄μž₯ν•˜κ³  μžˆλŠ” λ§€λ‹ˆμ§€λ“œ μ–Έμ–΄λ‘œμ„œ κ°€λΉ„μ§€μ½œλ ‰ν„°λ₯Ό 톡해 λ©”λͺ¨λ¦¬ λˆ„μˆ˜λ₯Ό λ°©μ§€ν•œλ‹€.

🧐 μ–Έλ§€λ‹ˆμ§€λ“œ 언어와 λ§€λ‹ˆμ§€λ“œ μ–Έμ–΄

ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λŠ” λ©”λͺ¨λ¦¬ 관리 방식에 따라 μ–Έλ§€λ‹ˆμ§€λ“œ 언어와 λ§€λ‹ˆμ§€λ“œ μ–Έμ–΄λ‘œ λΆ„λ₯˜ν•  수 μžˆλ‹€.

C언어같은 μ–Έλ§€λ‹ˆμ§€λ“œ μ–Έμ–΄λŠ” κ°œλ°œμžκ°€ λͺ…μ‹œμ μœΌλ‘œ λ©”λͺ¨λ¦¬λ₯Ό ν• λ‹Ήν•˜κ³  ν•΄μ œν•˜κΈ° μœ„ν•΄ malloc()κ³Ό free() 같은 μ €μˆ˜μ€€ λ©”λͺ¨λ¦¬ μ œμ–΄κΈ°λŠ₯을 μ œκ³΅ν•œλ‹€. μ΄λŠ” κ°œλ°œμžκ°€ λ©”λͺ¨λ¦¬ μ œμ–΄λ₯Ό μ£Όλ„ν• μˆ˜ μžˆμœΌλ―€λ‘œ 개발자의 μ—­λŸ‰μ— 따라 졜적의 μ„±λŠ₯을 확보할 수 μžˆμ§€λ§Œ κ·Έ λ°˜λŒ€μ˜ 경우 치λͺ…적인 였λ₯˜λ₯Ό 생산할 수 μžˆλ‹€.

μžλ°”μŠ€ν¬λ¦½νŠΈ 같은 λ§€λ‹ˆμ§€λ“œ μ–Έμ–΄λŠ” λ©”λͺ¨λ¦¬μ˜ ν• λ‹Ή 및 ν•΄μ œλ₯Ό μœ„ν•œ λ©”λͺ¨λ¦¬ 관리 κΈ°λŠ₯을 μ–Έμ–΄ μ°¨μ›μ—μ„œ λ‹΄λ‹Ήν•˜κ³  개발자의 직접적인 λ©”λͺ¨λ¦¬ μ œμ–΄λ₯Ό ν—ˆμš©ν•˜μ§€ μ•ŠλŠ”λ‹€. 즉, κ°œλ°œμžκ°€ λͺ…μ‹œμ μœΌλ‘œ λ©”λͺ¨λ¦¬λ₯Ό ν• λ‹Ήν•˜κ³  ν•΄μ œν•  수 μ—†λ‹€. 더이상 μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” λ©”λͺ¨λ¦¬μ˜ ν•΄μ œλŠ” 가비지 μ½œλ ‰ν„°κ°€ μˆ˜ν–‰ν•˜λ©°, 이 λ˜ν•œ κ°œλ°œμžκ°€ κ΄€μ—¬ν•  수 μ—†λ‹€.


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

μ‹λ³„μžλŠ” λ‹€μŒκ³Ό 같은 넀이밍 κ·œμΉ™μ„ μ€€μˆ˜ν•΄μ•Ό ν•œλ‹€.

  • μ‹λ³„μžλŠ” 특수문자λ₯Ό μ œμ™Έν•œ 문자, 숫자, μ–Έλ”μŠ€μ½”μ–΄, λ‹¬λŸ¬ 기호($)λ₯Ό 포함할 수 μžˆλ‹€.
  • 단, μ‹λ³„μžλŠ” 특수문자λ₯Ό μ œμ™Έν•œ 문자, μ–Έλ”μŠ€μ½”μ–΄(_), λ‹¬λŸ¬ 기호($)둜 μ‹œμž‘ν•΄μ•Ό ν•œλ‹€. 숫자둜 μ‹œμž‘ν•˜λŠ” 것은 ν—ˆμš©ν•˜μ§€ μ•ŠλŠ”λ‹€.
  • μ˜ˆμ•½μ–΄λŠ” μ‹λ³„μžλ‘œ μ‚¬μš©ν•  수 μ—†λ‹€.

🧐 μ˜ˆμ•½μ–΄

μ˜ˆμ•½μ–΄λŠ” ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—μ„œ μ‚¬μš©λ˜κ³  μžˆκ±°λ‚˜, μ‚¬μš©λ  μ˜ˆμ •μΈ 단어λ₯Ό λœ»ν•œλ‹€. μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œμ˜ μ˜ˆμ•½μ–΄λŠ” λ‹€μŒκ³Όκ°™λ‹€.

🧐 넀이밍 μ»¨λ²€μ…˜

ν•˜λ‚˜ μ΄μƒμ˜ μ˜μ–΄λ‹¨μ–΄λ‘œ κ΅¬μ„±λœ μ‹λ³„μžλ₯Ό λ§Œλ“€ λ•Œ 가독성 μ’‹κ²Œ 단어λ₯Ό ν•œ λˆˆμ— κ΅¬λΆ„ν•˜κΈ° μœ„ν•΄ κ·œμ •ν•œ λͺ…λͺ…κ·œμΉ™μ΄λ‹€. λ‹€μŒκ³Ό 같은 4가지 μœ ν˜•μ˜ 넀이밍 μ»¨λ²€μ…˜μ΄ 자주 μ‚¬μš©λœλ‹€. μ½”λ“œ μ „μ²΄μ˜ 가독성을 높이렀면 μΉ΄λ©œμΌ€μ΄μŠ€μ™€ νŒŒμŠ€μΉΌμΌ€μ΄μŠ€λ₯Ό λ”°λ₯΄λŠ”것이 μœ λ¦¬ν•˜λ‹€.

  // 카멜 μΌ€μ΄μŠ€ (camelCase)
  // 보톡 μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ λ³€μˆ˜λ‚˜ ν•¨μˆ˜μ˜ 이름
  var firstName;
  // μŠ€λ„€μ΄ν¬ μΌ€μ΄μŠ€ (snake_case)
  var first_name;
  // 파슀칼 μΌ€μ΄μŠ€ (PascalCase)
  // 보톡 μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ μƒμ„±μž ν•¨μˆ˜λ‚˜ 클래슀의 이름
  var FirstName;
  // 헝가리언 μΌ€μ΄μŠ€ (typeHungarianCase)
  var strFirstName;	// type + identifier
  var $elem = document.querySelector('myId');	// DOM Node
  const observable$ = fromEvent(document, 'click');	// RxJS μ˜΅μ €λ²„λΈ”
profile
μ΄μ‚¬μ€‘μž…λ‹ˆλ‹€!🌟https://velog.io/@devkyoung2

0개의 λŒ“κΈ€

κ΄€λ ¨ μ±„μš© 정보