🌱 4μž₯ : λ³€μˆ˜

μ˜€λ‹€ν˜œΒ·2022λ…„ 4μ›” 12일
0
post-thumbnail

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


πŸŒ»Β μ»΄ν“¨ν„°μ™€ λ©”λͺ¨λ¦¬

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

λ©”λͺ¨λ¦¬ : 데이터λ₯Ό μ €μž₯ν•  수 μžˆλŠ” λ©”λͺ¨λ¦¬ μ…€μ˜ 집합체

  • λ©”λͺ¨λ¦¬ μ…€ ν•˜λ‚˜μ˜ ν¬κΈ°λŠ” 1byte(8bit)
  • μ»΄ν“¨ν„°λŠ” λ©”λͺ¨λ¦¬ μ…€μ˜ 크기λ₯Ό λ‹¨μœ„λ‘œ 데이터λ₯Ό μ €μž₯ν•˜κ±°λ‚˜ 읽어듀이며 각 셀은 고유의 λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό κ°–λŠ”λ‹€.

μ»΄ν“¨ν„°λŠ” λ°μ΄ν„°μ˜ μ’…λ₯˜μ— 상관없이 λͺ¨λ“  데이터λ₯Ό 2μ§„μˆ˜λ‘œ μ €μž₯λœλ‹€. λ”°λΌμ„œ 값듀은 λ©”λͺ¨λ¦¬μ— μ €μž₯되며 CPUκ°€ 이λ₯Ό μ½μ–΄λ“€μ—¬μ„œ 연산을 μˆ˜ν–‰ν•˜κ³  μ—°μ‚°μ˜ 결과인 κ°’ λ˜ν•œ λ©”λͺ¨λ¦¬μ— μ €μž₯λœλ‹€.

ν•΄λ‹Ή 값에 μ ‘κ·Όν•˜λ €λ©΄ 값이 μ €μž₯λ˜μ–΄ μžˆλŠ” λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό 톡해 λ©”λͺ¨λ¦¬ 곡간에 μ ‘κ·Όν•΄μ•Ό ν•˜λŠ”λ°, μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” 직접적인 λ©”λͺ¨λ¦¬ μ œμ–΄λ₯Ό ν—ˆμš©ν•˜μ§€ μ•ŠλŠ”λ‹€. λ˜ν•œ ν”„λ‘œκ·Έλž¨μ΄ 싀행될 λ•Œλ§ˆλ‹€ 값이 μ €μž₯λ˜λŠ” λ©”λͺ¨λ¦¬ μœ„μΉ˜λŠ” μž„μ˜λ‘œ 결정이 λœλ‹€. λ”°λΌμ„œ λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šκ³  값에 μ ‘κ·Όν•˜κΈ° μœ„ν•΄ λ³€μˆ˜μ˜ κ°œλ…μ΄ λ“±μž₯ν•˜κ²Œ λ˜μ—ˆλ‹€.

πŸŒ»Β λ³€μˆ˜

λ³€μˆ˜(variable) : 값을 μ €μž₯ν•˜κΈ° μœ„ν•΄ ν™•λ³΄ν•œ λ©”λͺ¨λ¦¬ 곡간 자체 λ˜λŠ” κ·Έ λ©”λͺ¨λ¦¬ 곡간을 μ‹λ³„ν•˜κΈ° μœ„ν•΄ 뢙인 이름

  • μ»΄νŒŒμΌλŸ¬λ‚˜ 인터프리터에 μ˜ν•΄ 값이 μ €μž₯된 λ©”λͺ¨λ¦¬ κ³΅κ°„μ˜ μ£Όμ†Œλ‘œ μΉ˜ν™˜λ˜μ–΄ μ‹€ν–‰λœλ‹€.
  • 값이 μ•„λ‹ˆλΌ λ©”λͺ¨λ¦¬ 곡간에 μƒμ§•μ μœΌλ‘œ 이름을 뢙인 것

πŸŒ»Β μš©μ–΄ 정리

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

λ³€μˆ˜ κ°’: λ³€μˆ˜μ— μ €μž₯된 κ°’

ν• λ‹Ή(assignment) : λ³€μˆ˜μ— 값을 μ €μž₯ν•˜λŠ” 것

μ°Έμ‘°(reference) : λ³€μˆ˜μ— μ €μž₯된 값을 읽어 λ“€μ΄λŠ” 것

λ³€μˆ˜λͺ…을 톡해 μ €μž₯된 κ°’μ˜ 의미λ₯Ό λͺ…ν™•νžˆ ν•  수 있으며 μ½”λ“œμ˜ 가독성이 높아진닀. λ”°λΌμ„œ μˆ™κ³ ν•˜μ—¬ λ³€μˆ˜λͺ…을 지어야 ν•œλ‹€.

2. μ‹λ³„μž


μ‹λ³„μž : λ©”λͺ¨λ¦¬μ˜ μ–΄λ–€ 값을 κ΅¬λ³„ν•΄μ„œ 식별할 수 μžˆλŠ” κ³ μœ ν•œ 이름 (λ³€μˆ˜λͺ…, ν•¨μˆ˜λͺ… λ“±)

  • μ‹λ³„μžλŠ” λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό κΈ°μ–΅(μ €μž₯)ν•΄μ•Ό ν•œλ‹€.
  • μ‹λ³„μžμ™€ λ©”λͺ¨λ¦¬ μ£Όμ†Œκ°€ 맀핑 관계λ₯Ό λ§Ίκ³  있으며 맀핑 관계 λ˜ν•œ λ©”λͺ¨λ¦¬μ— μ €μž₯λ˜μ–΄ μžˆλ‹€.
  • μ‹λ³„μžλŠ” μ €μž₯된 λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό 톡해 λ©”λͺ¨λ¦¬ 곡간에 μ €μž₯된 값에 μ ‘κ·Όν•  수 μžˆλ‹€.

3. λ³€μˆ˜ μ„ μ–Έ


λ³€μˆ˜ μ„ μ–Έ : λ³€μˆ˜λ₯Ό μƒμ„±ν•˜λŠ” 것

  • λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜λ©΄, 값을 μ €μž₯ν•˜κΈ° μœ„ν•œ λ©”λͺ¨λ¦¬ 곡간을 확보(allocate)ν•˜κ³  λ³€μˆ˜ 이름과 ν™•λ³΄λœ λ©”λͺ¨λ¦¬ κ³΅κ°„μ˜ μ£Όμ†Œλ₯Ό μ—°κ²°(name binding)ν•΄μ„œ 값을 μ €μž₯ν•  수 있게 μ€€λΉ„ν•œλ‹€.
  • ν™•λ³΄λœ λ©”λͺ¨λ¦¬ 곡간은 확보가 ν•΄μ œλ˜κΈ° μ „κΉŒμ§€ λ‹€λ₯Έ μ‹œμŠ€ν…œμ΄ λ©”λͺ¨λ¦¬ 곡간을 μ‚¬μš©ν•  수 없도둝 μ•ˆμ „ν•˜κ²Œ λ³΄ν˜Έλœλ‹€.
  • λ³€μˆ˜ μ„ μ–Έ μ‹œ, let const var ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•œλ‹€.
    • varλŠ” ν•¨μˆ˜ 레벨 μŠ€μ½”ν”„, letκ³Ό const λŠ” 블둝 레벨 μŠ€μ½”ν”„λ₯Ό μ§€μ›ν•œλ‹€.
    • es6λŠ” es5의 μƒμœ„ μ§‘ν•©μœΌλ‘œ, es5 이전 μ½”λ“œλ“€λ„ es6μ—μ„œ 정상 λ™μž‘ν•œλ‹€.

πŸŒ»Β λ³€μˆ˜ μ„ μ–Έ κ³Όμ •

  • λ³€μˆ˜ μ„ μ–Έλ¬Έ( var score; )은
    1. μ„ μ–Έ 단계 : λ³€μˆ˜ 이름을 등둝(μ‹€ν–‰ μ»¨ν…μŠ€νŠΈμ— 등둝)ν•˜μ—¬ μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진에 λ³€μˆ˜μ˜ 쑴재 μ•Œλ¦Ό
    2. μ΄ˆκΈ°ν™” 단계 : 값을 μ €μž₯ν•  λ©”λͺ¨λ¦¬ 곡간을 ν™•λ³΄ν•˜κ³  μ•”λ¬΅μ μœΌλ‘œ undefined λ₯Ό ν• λ‹Ήν•˜μ—¬ μ΄ˆκΈ°ν™”
  • varλŠ” μ„ μ–Έ 단계와 μ΄ˆκΈ°ν™” 단계가 λ™μ‹œμ— μ§„ν–‰λœλ‹€. λ”°λΌμ„œ var둜 μ„ μ–Έν•œ λ³€μˆ˜λŠ” undefined 값을 κ°–κ²Œ λœλ‹€. varλŠ” μ•”λ¬΅μ μœΌλ‘œ μ΄ˆκΈ°ν™”λ₯Ό μˆ˜ν–‰ν•¨μœΌλ‘œ μ“°λ ˆκΈ°κ°’μ΄ λ‚˜μ˜¬ 일이 μ—†λ‹€.
  • 선언을 ν•˜μ§€ μ•Šμ€ μ‹λ³„μžμ— μ ‘κ·Όν•˜κ²Œ 되면 ReferenceError(μ°Έμ‘° μ—λŸ¬)κ°€ λ°œμƒν•œλ‹€.

μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ

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

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

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


  • λ³€μˆ˜ 선언은 λŸ°νƒ€μž„ 이전 평가 과정에 λ¨Όμ € μ‹€ν–‰λœλ‹€.
  • μ‹€ν–‰ μ „ 평가 κ³Όμ •μ—μ„œ λͺ¨λ“  μ„ μ–Έλ¬Έ(λ³€μˆ˜, ν•¨μˆ˜ λ“±)을 μ†ŒμŠ€μ½”λ“œμ—μ„œ μ°Ύμ•„λ‚΄ λ¨Όμ € μ‹€ν–‰ν•œλ‹€.
  • μ†ŒμŠ€μ½”λ“œ 평가과정이 λλ‚˜λ©΄ 선언문을 μ œμ™Έν•˜κ³  μ½”λ“œλ₯Ό ν•œ 쀄씩 순차적으둜 μ‹€ν–‰ν•œλ‹€.
  • λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ…(μ‹λ³„μž ν˜Έμ΄μŠ€νŒ…)
    • λ³€μˆ˜ 선언문이 μ½”λ“œμ˜ μ„ λ‘λ‘œ λŒμ–΄ μ˜¬λ €μ§„ κ²ƒμ²˜λŸΌ λ™μž‘ν•˜λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ νŠΉμ§•
    • ν‚€μ›Œλ“œλ‘œ μ„ μ–Έλœ λͺ¨λ“  μ‹λ³„μžλŠ” ν˜Έμ΄μŠ€νŒ…λœλ‹€.

5. κ°’μ˜ ν• λ‹Ή


  • ν• λ‹Ή μ‹œ ν• λ‹Ή μ—°μ‚°μž(=) μ‚¬μš©ν•˜μ—¬ μš°λ³€μ— μžˆλŠ” 값을 μ’Œλ³€ λ³€μˆ˜μ— ν• λ‹Ήν•œλ‹€.
  • λ³€μˆ˜ μ„ μ–Έκ³Ό κ°’ 할당을 단좕 ν‘œν˜„(var num = 3;)해도 μžλ°”μŠ€ν¬λ¦½νŠΈ μ—”μ§„μ—μ„œλŠ” λ³€μˆ˜ μ„ μ–Έ / κ°’μ˜ 할당을 2개의 문으둜 λ‚˜λˆ„μ–΄ μ‹€ν–‰ν•œλ‹€.
  • λ³€μˆ˜ 선언은 λŸ°νƒ€μž„ 이전(평가 κ³Όμ •)에 μ‹€ν–‰λ˜μ§€λ§Œ, κ°’μ˜ 할당은 λŸ°νƒ€μž„μ— μ‹€ν–‰λœλ‹€. λ”°λΌμ„œ undefined둜 ν• λ‹Ήλ˜μ–΄ μ΄ˆκΈ°ν™” λ˜λŠ” 것은 변함 μ—†λ‹€.
  • λ³€μˆ˜μ— 값을 ν• λ‹Ήν•  λ•ŒλŠ” 이전 κ°’(undefined)κ°€ μ €μž₯λ˜μ–΄ 있던 λ©”λͺ¨λ¦¬ 곡간을 μ§€μš°κ³  할당값을 μƒˆλ‘­κ²Œ μ €μž₯ν•˜λŠ” 것이 μ•„λ‹ˆλΌ, μƒˆλ‘œμš΄ λ©”λͺ¨λ¦¬ 곡간을 ν™•λ³΄ν•˜κ³  그곳에 할당값을 μ €μž₯ν•œλ‹€.

6. μž¬ν• λ‹Ή


  • μž¬ν• λ‹Ή : 이미 값이 ν• λ‹Ήλ˜μ–΄ μžˆλŠ” λ³€μˆ˜μ— μƒˆλ‘œμš΄ 값을 λ˜λ‹€μ‹œ ν• λ‹Ήν•˜λŠ” 것
  • μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” λ§€λ‹ˆμ§€λ“œ μ–Έμ–΄λ‘œ, μ–΄λ–€ μ‹λ³„μžμ™€λ„ μ—°κ²°λ˜μ–΄ μžˆμ§€ μ•Šμ€ λ©”λͺ¨λ¦¬ 값은 가비지 μ½œλ ‰ν„°μ— μ˜ν•΄ λ©”λͺ¨λ¦¬μ—μ„œ μžλ™ ν•΄μ œ λœλ‹€.
  • 가비지 μ½œλ ‰ν„°λŠ” μ–Έμ–΄ μ°¨μ›μ—μ„œ λ‹΄λ‹Ήν•˜λ―€λ‘œ λ©”λͺ¨λ¦¬κ°€ μ–Έμ œ ν•΄μ œλ  지 κ°œλ°œμžκ°€ μ˜ˆμΈ‘ν•  μˆ˜λŠ” μ—†λ‹€.
  • μ–Έλ§€λ‹ˆμ§€λ“œμ–Έμ–΄(unmanaged language) vs λ§€λ‹ˆμ§€λ“œμ–Έμ–΄(managed language)
    • μ–Έλ§€λ‹ˆμ§€λ“œμ–Έμ–΄
      • ex ) Cμ–Έμ–΄
      • κ°œλ°œμžκ°€ λͺ…μ‹œμ μœΌλ‘œ λ©”λͺ¨λ¦¬λ₯Ό ν• λ‹Ήν•˜κ³  ν•΄μ œν•˜κΈ° μœ„ν•΄μ„œ λ©”λͺ¨λ¦¬ μ œμ–΄ κΈ°λŠ₯ 제곡
      • 개발자의 μ—­λŸ‰μ— 따라 졜적의 μ„±λŠ₯을 확보할 수 μžˆμœΌλ‚˜ 치λͺ…적 였λ₯˜κ°€ λ°œμƒν•  수 있음.
    • λ§€λ‹ˆμ§€λ“œμ–Έμ–΄
      • λ©”λͺ¨λ¦¬μ˜ ν• λ‹Ή, ν•΄μ œ 등을 μœ„ν•œ λ©”λͺ¨λ¦¬ 관리 κΈ°λŠ₯을 μ–Έμ–΄ μ°¨μ›μ—μ„œ λ‹΄λ‹Ήν•˜λ©° 개발자의 직접적인 λ©”λͺ¨λ¦¬ μ œμ–΄λ₯Ό ν—ˆμš©ν•˜μ§€ μ•ŠλŠ”λ‹€.
      • λ©”λͺ¨λ¦¬ ν•΄μ œλŠ” 가비지 μ½œλ ‰ν„°κ°€ μˆ˜ν–‰ν•˜λ©° κ°œλ°œμžκ°€ κ΄€μ—¬ν•  수 μ—†λ‹€.
      • μΌμ •ν•œ 생산성을 확보할 수 μžˆμ§€λ§Œ μ„±λŠ₯ λ©΄μ—μ„œ 손싀을 κ°μˆ˜ν•΄μ•Ό ν•œλ‹€.

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


  1. μ‹λ³„μžλŠ” 특수문자λ₯Ό μ œμ™Έν•œ 문자, 숫자, μ–Έλ”μŠ€μ½”μ–΄, λ‹¬λŸ¬ 기호λ₯Ό 포함할 수 μžˆλ‹€. (숫자둜 μ‹œμž‘ X)
  2. μ˜ˆμ•½μ–΄λŠ” μ‹λ³„μžλ‘œ μ‚¬μš©ν•  수 μ—†λ‹€.
  • μ—¬λŸ¬κ°œλ₯Ό 콀마둜 κ΅¬λΆ„ν•΄μ„œ μ„ μ–Έν•  μˆ˜λŠ” μžˆμœΌλ‚˜ ꢌμž₯ X
  • μ•ŒνŒŒλ²³ μ΄μ™Έμ˜ μœ λ‹ˆμ½”λ“œ 문자둜 μ‹λ³„μž ꢌμž₯ X
  • λŒ€μ†Œλ¬Έμžλ₯Ό κ΅¬λΆ„ν•œλ‹€.

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

  1. μΉ΄λ©œμΌ€μ΄μŠ€(camelCase)
  2. μŠ€λ„€μ΄ν¬μΌ€μ΄μŠ€(snake_case)
  3. νŒŒμŠ€μΉΌμΌ€μ΄μŠ€(PascalCase)
  4. ν—κ°€λ¦¬μ–ΈμΌ€μ΄μŠ€(typeHungarianCase)

μΌλ°˜μ μœΌλ‘œλŠ” λ³€μˆ˜λ‚˜ ν•¨μˆ˜μ— 카멜 μΌ€μ΄μŠ€, μƒμ„±μž ν•¨μˆ˜λ‚˜ ν΄λž˜μŠ€μ—λŠ” 파슀칼 μΌ€μ΄μŠ€λ₯Ό μ‚¬μš©

μΆ”κ°€λ‘œ μ•Œμ•„λ΄μ•Ό ν•  것

  1. μŠ€μ½”ν”„
  2. μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ
  3. 넀이밍 μ»¨λ²€μ…˜

μžλ°”μŠ€ν¬λ¦½νŠΈ μŠ€νƒ€μΌ κ°€μ΄λ“œ - 넀이밍 μ»¨λ²€μ…˜ 편

profile
ν”„λ‘ νŠΈμ—”λ“œμ— λ°±μ—”λ“œ ν•œ μŠ€ν‘Ό πŸ₯„

0개의 λŒ“κΈ€