66651
πŸ‘€
66651
  • λΆ„λ₯˜ 전체보기 (57)
    • note (28)
    • log (13)
    • error (9)
    • etc (7)

λΈ”λ‘œκ·Έ 메뉴

  • ν™ˆ
  • νƒœκ·Έ
  • λ°©λͺ…둝

ν‹°μŠ€ν† λ¦¬

hELLO Β· Designed By μ •μƒμš°.
66651

πŸ‘€

note

[Deep Dive] 14-15μž₯

14μž₯ μ „μ—­ λ³€μˆ˜μ˜ 문제점

λ³€μˆ˜μ˜ 생λͺ… μ£ΌκΈ°

  • μ§€μ—­ λ³€μˆ˜μ˜ 생λͺ… μ£ΌκΈ°
    μ „μ—­ λ³€μˆ˜μ˜ 생λͺ… μ£ΌκΈ°λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 생λͺ… 주기와 κ°™λ‹€. ν•˜μ§€λ§Œ ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ μ„ μ–Έλœ μ§€μ—­ λ³€μˆ˜λŠ” ν•¨μˆ˜κ°€ 호좜되면 μƒμ„±λ˜κ³  ν•¨μˆ˜κ°€ μ’…λ£Œν•˜λ©΄ μ†Œλ©Έν•œλ‹€. 즉, μ§€μ—­ λ³€μˆ˜μ˜ 생λͺ… μ£ΌκΈ°λŠ” ν•¨μˆ˜μ˜ 생λͺ… 주기와 μΌμΉ˜ν•œλ‹€.
    μ§€μ—­ λ³€μˆ˜κ°€ ν•¨μˆ˜λ³΄λ‹€ 였래 μƒμ‘΄ν•˜λŠ” κ²½μš°λ„ μžˆλ‹€. λˆ„κ΅°κ°€ μŠ€μ½”ν”„λ₯Ό μ°Έμ‘°ν•˜κ³  있으면 μŠ€μ½”ν”„λŠ” μ†Œλ©Έν•˜μ§€ μ•Šκ³  μƒμ‘΄ν•˜κ²Œ λœλ‹€. μ§€μ—­ λ³€μˆ˜λŠ” ν•¨μˆ˜κ°€ μƒμ„±ν•œ μŠ€μ½”ν”„μ— λ“±λ‘λœλ‹€. λ”°λΌμ„œ λ³€μˆ˜λŠ” μžμ‹ μ΄ λ“±λ‘λœ μŠ€μ½”ν”„κ°€ μ†Œλ©Έ(λ©”λͺ¨λ¦¬ ν•΄μ œ)될 λ•ŒκΉŒμ§€ μœ νš¨ν•˜λ‹€.
    λ˜ν•œ ν˜Έμ΄μŠ€νŒ…μ€ μŠ€μ½”ν”„λ₯Ό λ‹¨μœ„λ‘œ λ™μž‘ν•˜λ©°, ν˜Έμ΄μŠ€νŒ…μ€ λ³€μˆ˜ 선언이 μŠ€μ½”ν”„μ˜ μ„ λ‘λ‘œ λŒμ–΄ μ˜¬λ €μ§„ κ²ƒμ²˜λŸΌ λ™μž‘ν•˜λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈ 고유의 νŠΉμ§•μ„ λ§ν•œλ‹€κ³  ν•  수 μžˆλ‹€.
  • μ „μ—­ λ³€μˆ˜μ˜ 생λͺ… μ£ΌκΈ°
    λΈŒλΌμš°μ € ν™˜κ²½μ—μ„œ μ „μ—­ κ°μ²΄λŠ” windowμ΄λ―€λ‘œ λΈŒλΌμš°μ € ν™˜κ²½μ—μ„œ [ic]var[/ic] ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ μ „μ—­ λ³€μˆ˜λŠ” μ „μ—­ 객체 window의 ν”„λ‘œνΌν‹°λ‹€. μ „μ—­ 객체 windowλŠ” μ›ΉνŽ˜μ΄μ§€λ₯Ό λ‹«κΈ° μ „κΉŒμ§€ μœ νš¨ν•˜λ‹€. 즉, [ic]var[/ic] ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ μ „μ—­ λ³€μˆ˜μ˜ 생λͺ… μ£ΌκΈ°λŠ” μ „μ—­ 객체의 생λͺ… 주기와 μΌμΉ˜ν•œλ‹€.

μ „μ—­ λ³€μˆ˜μ˜ 문제점

  • 암묡적 κ²°ν•©
    μ „μ—­ λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜λŠ” 것은 λͺ¨λ“  μ½”λ“œκ°€ μ „μ—­ λ³€μˆ˜λ₯Ό μ°Έμ‘°ν•˜κ³  λ³€κ²½ν•  수 μžˆλŠ” 암묡적 결합을 ν—ˆμš©ν•˜λŠ” 것이닀. λ³€μˆ˜μ˜ 유효 λ²”μœ„κ°€ 크면 클수둝 μ½”λ“œμ˜ 가독성을 λ‚˜λΉ μ§€κ³  μ˜λ„μΉ˜ μ•Šκ²Œ μƒνƒœκ°€ 변경될 수 μžˆλŠ” μœ„ν—˜μ„±λ„ λ†’μ•„μ§„λ‹€.
  • κΈ΄ 생λͺ… μ£ΌκΈ°
    μ „μ—­ λ³€μˆ˜λŠ” 생λͺ… μ£ΌκΈ°κ°€ κΈΈλ‹€. λ”°λΌμ„œ λ©”λͺ¨λ¦¬ λ¦¬μ†ŒμŠ€λ„ 였랜 κΈ°κ°„ μ†ŒλΉ„ν•œλ‹€. λ˜ν•œ μ „μ—­ λ³€μˆ˜μ˜ μƒνƒœλ₯Ό λ³€κ²½ν•  수 μžˆλŠ” μ‹œκ°„λ„ κΈΈκ³  κΈ°νšŒλ„ λ§Žλ‹€.
  • μŠ€μ½”ν”„ 체인 μƒμ—μ„œ 쒅점에 쑴재
    μ „μ—­ λ³€μˆ˜λŠ” μŠ€μ½”ν”„ 체인 μƒμ—μ„œ 쒅점에 μ‘΄μž¬ν•œλ‹€. μ΄λŠ” λ³€μˆ˜λ₯Ό 검색할 λ•Œ μ „μ—­ λ³€μˆ˜κ°€ κ°€μž₯ λ§ˆμ§€λ§‰μ— κ²€μƒ‰λœλ‹€λŠ” 것을 λ§ν•œλ‹€. 즉, μ „μ—­ λ³€μˆ˜μ˜ 검색 속도가 κ°€μž₯ λŠλ¦¬λ‹€.
  • λ„€μž„μŠ€νŽ˜μ΄μŠ€ μ˜€μ—Ό
    μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ κ°€μž₯ 큰 문제점 쀑 ν•˜λ‚˜λŠ” 파일이 λΆ„λ¦¬λ˜μ–΄ μžˆλ‹€ 해도 ν•˜λ‚˜μ˜ μ „μ—­ μŠ€μ½”ν”„λ₯Ό κ³΅μœ ν•œλ‹€λŠ” 것이닀. λ”°λΌμ„œ λ‹€λ₯Έ 파일 λ‚΄μ—μ„œ μ‘΄μž¬ν•΄λ„ μ˜ˆμƒμΉ˜ λͺ»ν•œ κ²°κ³Όλ₯Ό κ°€μ Έμ˜¬ 수 μžˆλ‹€.

 

μ „μ—­ λ³€μˆ˜μ˜ μ‚¬μš©μ„ μ–΅μ œν•˜λŠ” 방법

μ „μ—­ λ³€μˆ˜λ₯Ό λ°˜λ“œμ‹œ μ‚¬μš©ν•΄μ•Ό ν•  이유λ₯Ό μ°Ύμ§€ λͺ»ν•œλ‹€λ©΄ μ§€μ—­ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•œλ‹€. λ³€μˆ˜μ˜ μŠ€μ½”ν”„λŠ” μ’μ„μˆ˜λ‘ μ’‹λ‹€.

  • μ¦‰μ‹œ μ‹€ν–‰ ν•¨μˆ˜
    λͺ¨λ“  μ½”λ“œλ₯Ό μ¦‰μ‹œ μ‹€ν–‰ ν•¨μˆ˜λ‘œ 감싸면 λͺ¨λ“  λ³€μˆ˜λŠ” μ¦‰μ‹œ μ‹€ν–‰ ν•¨μˆ˜μ˜ μ§€μ—­ λ³€μˆ˜κ°€ λœλ‹€.
  • λ„€μž„μŠ€νŽ˜μ΄μŠ€ 객체
    전역에 λ„€μž„μŠ€νŽ˜μ΄μŠ€ 역할을 λ‹΄λ‹Ήν•  객체λ₯Ό μƒμ„±ν•˜κ³  μ „μ—­ λ³€μˆ˜μ²˜λŸΌ μ‚¬μš©ν•˜κ³  싢은 λ³€μˆ˜λ₯Ό ν”„λ‘œνΌν‹°λ‘œ μΆ”κ°€ν•˜λŠ” 방법이닀.
  • λͺ¨λ“ˆ νŒ¨ν„΄
    λͺ¨λ“ˆ νŒ¨ν„΄μ€ 클래슀λ₯Ό λͺ¨λ°©ν•΄μ„œ 관련이 μžˆλŠ” λ³€μˆ˜μ™€ ν•¨μˆ˜λ₯Ό λͺ¨μ•„ μ¦‰μ‹œ μ‹€ν–‰ ν•¨μˆ˜λ‘œ 감싸 ν•˜λ‚˜μ˜ λͺ¨λ“ˆμ„ λ§Œλ“ λ‹€.
  • ES6 λͺ¨λ“ˆ
    ES6 λͺ¨λ“ˆμ„ μ‚¬μš©ν•˜λ©΄ λ”λŠ” μ „μ—­ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•  수 μ—†λ‹€. ES6 λͺ¨λ“ˆμ€ 파일 자체의 λ…μžμ μΈ λͺ¨λ“ˆ μŠ€μ½”ν”„λ₯Ό μ œκ³΅ν•œλ‹€. [ic]script[/ic] νƒœκ·Έμ— [ic]type="module"[/ic] μ–΄νŠΈλ¦¬λ·°νŠΈλ₯Ό μΆ”κ°€ν•˜λ©΄ λ‘œλ“œλœ μžλ°”μŠ€ν¬λ¦½νŠΈ νŒŒμΌμ€ λͺ¨λ“ˆλ‘œμ„œ λ™μž‘ν•œλ‹€. λͺ¨λ“ˆμ˜ 파일 ν™•μž₯μžλŠ” mjsλ₯Ό ꢌμž₯ν•œλ‹€.
var MYAPP = {}; // μ „μ—­ λ„€μž„μŠ€νŽ˜μ΄μŠ€ 객체

MYAPP.name = 'Lee';

console.log(MYAPP.name); // Lee

// λͺ¨λ“ˆ νŒ¨ν„΄
var Counter = (function() {
  // private λ³€μˆ˜ (μ™ΈλΆ€μ—μ„œ μ ‘κ·Όν•  수 μ—†κ³  λ‚΄λΆ€μ—μ„œλ§Œ μ‚¬μš© λœλ‹€)
  var num = 0;
  
  // μ™ΈλΆ€λ‘œ κ³΅κ°œν•  λ°μ΄ν„°λ‚˜ λ©”μ„œλ“œλ₯Ό ν”„λ‘œνΌν‹°λ‘œ μΆ”κ°€ν•œ 객체λ₯Ό λ°˜ν™˜ν•œλ‹€.
  return {
    increase() {
      return ++num;
    },
    decrease() {
      return --num;
    }
  }
})();

console.log(Counter.num); // undefined
console.log(Counter.increase); // 1
<!-- ES6 λͺ¨λ“ˆ -->
<script type="module" src="lib.mjs"></script>

 

 

 

 

15μž₯ let, const ν‚€μ›Œλ“œμ™€ 블둝 레벨 μŠ€μ½”ν”„

var ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ λ³€μˆ˜μ˜ 문제점

  • λ³€μˆ˜ 쀑볡 μ„ μ–Έ ν—ˆμš©
    λ§Œμ•½ λ™μΌν•œ μ΄λ¦„μ˜ λ³€μˆ˜κ°€ 이미 μ„ μ–Έλ˜μ–΄ μžˆλŠ” 것을 λͺ¨λ₯΄κ³  λ³€μˆ˜λ₯Ό 쀑볡 μ„ μ–Έν•˜λ©΄μ„œ κ°’κΉŒμ§€ ν• λ‹Ήν–ˆλ‹€λ©΄ μ˜λ„μΉ˜ μ•Šκ²Œ λ¨Όμ € μ„ μ–Έλœ λ³€μˆ˜ 값이 λ³€κ²½λ˜λŠ” λΆ€μž‘μš©μ΄ λ°œμƒν•œλ‹€.
  • ν•¨μˆ˜ 레벨 μŠ€μ½”ν”„
    ν•¨μˆ˜ 레벨 μŠ€μ½”ν”„λŠ” μ „μ—­ λ³€μˆ˜λ₯Ό λ‚¨λ°œν•  κ°€λŠ₯성을 높인닀. 이둜 인해 μ˜λ„μΉ˜ μ•Šκ²Œ μ „μ—­ λ³€μˆ˜κ°€ 쀑볡 μ„ μ–Έλ˜λŠ” κ²½μš°κ°€ λ°œμƒν•œλ‹€.
  • λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ…
    λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ…μ— μ˜ν•΄ [ic]var[/ic] ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ λ³€μˆ˜λ₯Ό λ³€μˆ˜ μ„ μ–Έλ¬Έ 이전에 μ°Έμ‘°ν•  수 μžˆλ‹€. λ³€μˆ˜ μ„ μ–Έλ¬Έ 이전에 λ³€μˆ˜λ₯Ό μ°Έμ‘°ν•˜λŠ” 것은 λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ…μ— μ˜ν•΄ μ—λŸ¬λ₯Ό λ°œμƒμ‹œν‚€μ§€λŠ” μ•Šμ§€λ§Œ ν”„λ‘œκ·Έλž¨μ˜ 흐름상 λ§žμ§€ μ•Šμ„λΏλ”λŸ¬ 가독성을 λ–¨μ–΄λœ¨λ¦¬κ³  였λ₯˜λ₯Ό λ°œμƒμ‹œν‚¬ μ—¬μ§€λ₯Ό 남긴닀.

 

let ν‚€μ›Œλ“œ

  • λ³€μˆ˜ 쀑볡 μ„ μ–Έ κΈˆμ§€
    [ic]let[/ic] ν‚€μ›Œλ“œλ‘œ 이름이 같은 λ³€μˆ˜λ₯Ό 쀑볡 μ„ μ–Έν•˜λ©΄ 문법 μ—λŸ¬κ°€ λ°œμƒν•œλ‹€.
  • 블둝 레벨 μŠ€μ½”ν”„
    [ic]let[/ic] ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ λ³€μˆ˜λŠ” 블둝 레벨 μŠ€μ½”ν”„λ₯Ό λ”°λ₯Έλ‹€.
  • λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ…
    [ic]let[/ic] ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ λ³€μˆ˜λŠ” 'μ„ μ–Έ 단계'와 'μ΄ˆκΈ°ν™” 단계'κ°€ λΆ„λ¦¬λ˜μ–΄ μ§„ν–‰λœλ‹€. 즉, λŸ°νƒ€μž„ 이전에 μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진에 μ˜ν•΄ μ•”λ¬΅μ μœΌλ‘œ μ„ μ–Έ 단계가 λ¨Όμ € μ‹€ν–‰λ˜μ§€λ§Œ μ΄ˆκΈ°ν™” λ‹¨κ³„λŠ” λ³€μˆ˜ 선언문에 λ„λ‹¬ν–ˆμ„ λ•Œ μ‹€ν–‰λœλ‹€. 
    [ic]let[/ic] ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ λ³€μˆ˜λŠ” μŠ€μ½”ν”„μ˜ μ‹œμž‘ 지점뢀터 μ΄ˆκΈ°ν™” 단계 μ‹œμž‘ 지점(λ³€μˆ˜ μ„ μ–Έλ¬Έ)κΉŒμ§€ λ³€μˆ˜λ₯Ό μ°Έμ‘°ν•  수 μ—†λ‹€. μŠ€μ½”ν”„μ˜ μ‹œμž‘ 지점뢀터 μ΄ˆκΈ°ν™” μ‹œμž‘ μ§€μ κΉŒμ§€ λ³€μˆ˜λ₯Ό μ°Έμ‘°ν•  수 μ—†λŠ” ꡬ간을 μΌμ‹œμ  μ‚¬κ°μ§€λŒ€λΌκ³  λΆ€λ₯Έλ‹€.
    (λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ…μ΄ λ°œμƒν•˜μ§€ μ•ŠλŠ” κ²ƒμ²˜λŸΌ λ³΄μ΄μ§€λ§Œ ν˜Έμ΄μŠ€νŒ…μ€ μ—¬μ „νžˆ λ°œμƒν•œλ‹€.)
  • μ „μ—­ 객체와 let
    [ic]let[/ic] ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ μ „μ—­ λ³€μˆ˜λŠ” μ „μ—­ 객체(window)의 ν”„λ‘œνΌν‹°κ°€ μ•„λ‹ˆλ‹€. [ic]let[/ic] μ „μ—­ λ³€μˆ˜λŠ” 보이지 μ•ŠλŠ” κ°œλ…μ μΈ 블둝(μ „μ—­ λ ˆμ‹œμ»¬ ν™˜κ²½μ˜ 선언적 ν™˜κ²½ λ ˆμ½”λ“œ) 내에 μ‘΄μž¬ν•˜κ²Œ λœλ‹€.

 

const ν‚€μ›Œλ“œ

  • μ„ μ–Έκ³Ό μ΄ˆκΈ°ν™”
    [ic]const[/ic] ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ λ³€μˆ˜λŠ” λ°˜λ“œμ‹œ μ„ μ–Έκ³Ό λ™μ‹œμ— μ΄ˆκΈ°ν™”ν•΄μ•Ό ν•œλ‹€.
    [ic]const[/ic] ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ λ³€μˆ˜λŠ” let ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ λ³€μˆ˜μ™€ λ§ˆμ°¬κ°€μ§€λ‘œ 블둝 레벨 μŠ€μ½”ν”„λ₯Ό κ°€μ§€λ©°, λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ…μ΄ λ°œμƒν•˜μ§€ μ•ŠλŠ” κ²ƒμ²˜λŸΌ λ™μž‘ν•œλ‹€.
  • μž¬ν• λ‹Ή κΈˆμ§€
    [ic]const[/ic] ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ λ³€μˆ˜λŠ” μž¬ν• λ‹Ήμ΄ κΈˆμ§€λœλ‹€.
  • μƒμˆ˜
    [ic]const[/ic] ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ λ³€μˆ˜μ— μ›μ‹œ 값을 ν• λ‹Ήν•œ 경우 λ³€μˆ˜ 값을 λ³€κ²½ν•  수 μ—†λ‹€. μ΄λŸ¬ν•œ νŠΉμ§•μ„ μ΄μš©ν•΄ [ic]const[/ic] ν‚€μ›Œλ“œλ₯Ό μƒμˆ˜λ₯Ό ν‘œν˜„ν•˜λŠ” 데 μ‚¬μš©ν•˜κΈ°λ„ ν•œλ‹€.
    일반적으둜 μƒμˆ˜μ˜ 이름은 λŒ€λ¬Έμžλ‘œ μ„ μ–Έν•΄ μƒμˆ˜μž„μ„ λͺ…ν™•νžˆ λ‚˜νƒ€λ‚Έλ‹€. μ—¬λŸ¬ λ‹¨μ–΄λ‘œ 이뀄진 κ²½μš°μ—λŠ” μ–Έλ”μŠ€μ½”μ–΄λ‘œ κ΅¬λΆ„ν•΄μ„œ μŠ€λ„€μ΄ν¬ μΌ€μ΄μŠ€λ‘œ ν‘œν˜„ν•˜λŠ” 것이 μΌλ°˜μ μ΄λ‹€. [ic]const TAX_RATE = 0.1;[/ic]
  • const ν‚€μ›Œλ“œμ™€ 객체
    [ic]const[/ic] ν‚€μ›Œλ“œλŠ” μž¬ν• λ‹Ήμ„ κΈˆμ§€ν•  뿐 λΆˆλ³€μ„ μ˜λ―Έν•˜μ§€λŠ” μ•ŠλŠ”λ‹€. λ‹€μ‹œ 말해, μƒˆλ‘œμš΄ 값을 μž¬ν• λ‹Ήν•˜λŠ” 것은 λΆˆκ°€λŠ₯ ν•˜μ§€λ§Œ ν”„λ‘œνΌν‹° 동적 생성, μ‚­μ œ, ν”„λ‘œνΌν‹° κ°’μ˜ 변경을 톡해 객체λ₯Ό λ³€κ²½ν•˜λŠ” 것은 κ°€λŠ₯ν•˜λ‹€. μ΄λ•Œ 객체가 λ³€κ²½λ˜λ”λΌλ„ λ³€μˆ˜μ— ν• λ‹Ήλœ μ°Έμ‘° 값은 λ³€κ²½λ˜μ§€ μ•ŠλŠ”λ‹€.

 

var vs. let vs. const

  • ES6 λ₯Ό μ‚¬μš©ν•œλ‹€λ©΄ [ic]var[/ic] ν‚€μ›Œλ“œλŠ” μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€.
  • μž¬ν• λ‹Ήμ΄ ν•„μš”ν•œ κ²½μš°μ— ν•œμ •ν•΄ let ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•œλ‹€. λ³€μˆ˜μ˜ μŠ€μ½”ν”„λŠ” μ΅œλŒ€ν•œ 쒁게 λ§Œλ“ λ‹€.
  • 변경이 λ°œμƒν•˜μ§€ μ•ŠλŠ” μ›μ‹œ κ°’κ³Ό κ°μ²΄μ—λŠ” [ic]const[/ic] ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•œλ‹€.

 

 

 

 

 

 

μ €μž‘μžν‘œμ‹œ (μƒˆμ°½μ—΄λ¦Ό)
    'note' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • [Deep Dive] 16μž₯ ν”„λ‘œνΌν‹° μ–΄νŠΈλ¦¬λ·°νŠΈ
    • [JavaScript] μ‰Όν‘œ μ—°μ‚°μž (Comma Operator)
    • [Deep Dive] 12-13μž₯
    • [Deep Dive] 10-11μž₯
    66651
    66651
    always awake

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”