πŸ“ŒLanguage/JavaScript

[Deep Dive] μ „μ—­ λ³€μˆ˜μ˜ 문제점

hellohailie 2022. 12. 5. 14:29

βœ”οΈ 이번 정독을 톡해 μ•Œκ²Œ 된 것
μ „μ—­ λ³€μˆ˜μ™€ 지역 λ³€μˆ˜μ˜ 생λͺ…μ£ΌκΈ°λ₯Ό μ„€λͺ…ν•΄μ£Όμ„Έμš”.
μ „μ—­ λ³€μˆ˜ μ‚¬μš©μ„ μ–΅μ œν•΄μ•Όν•˜λŠ”λ° κ·Έ μ΄μœ κ°€ λ¬΄μ—‡μΈκ°€μš”?

 

<λ‹΅ 미리보기>

πŸ€” μ „μ—­ λ³€μˆ˜μ™€ 지역 λ³€μˆ˜μ˜ 생λͺ…μ£ΌκΈ°λ₯Ό μ„€λͺ…ν•΄μ£Όμ„Έμš”.

πŸ€“ μ „μ—­ λ³€μˆ˜λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 생λͺ… 주기와 λŒ€μ²΄λ‘œ κ°™μŠ΅λ‹ˆλ‹€. 지역 λ³€μˆ˜λŠ” ν•¨μˆ˜κ°€ ν˜ΈμΆœλ˜μ–΄ μ‹€ν–‰λ˜λŠ” λ™μ•ˆμ—λ§Œ μœ νš¨ν•©λ‹ˆλ‹€. 

 

πŸ€” μ „μ—­ λ³€μˆ˜ μ‚¬μš©μ„ μ–΅μ œν•΄μ•Όν•˜λŠ”λ° κ·Έ μ΄μœ κ°€ λ¬΄μ—‡μΈκ°€μš”?

πŸ€“ μ „μ—­ λ³€μˆ˜λŠ” 생λͺ… μ£ΌκΈ°κ°€ κΈΈκΈ° λ•Œλ¬Έμ— λ©”λͺ¨λ¦¬ λ¦¬μ†ŒμŠ€λ„ 길게 μ‚¬μš©ν•  λΏλ”λŸ¬, μ „μ—­ μƒνƒœλ₯Ό μ˜λ„μΉ˜ μ•Šκ²Œ λ³€κ²½ν•  κ°€λŠ₯성도 μ»€μ§„λ‹€λŠ” 것이기 λ•Œλ¬Έμ— μ „μ—­ λ³€μˆ˜ μ‚¬μš©μ„ μ–΅μ œν•΄μ•Όν•©λ‹ˆλ‹€. 

 


βœ”οΈ λ³€μˆ˜μ˜ 생λͺ… μ£ΌκΈ°

  • 지역 λ³€μˆ˜μ˜ 생λͺ… μ£ΌκΈ° => ν•¨μˆ˜κ°€ ν˜ΈμΆœλ˜μ–΄ μ‹€ν–‰λ˜λŠ” λ™μ•ˆμ—λ§Œ μœ νš¨ν•˜λ‹€. 
  • μ „μ—­ λ³€μˆ˜μ˜ 생λͺ… μ£ΌκΈ° => μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 생λͺ… 주기와 κ°™λ‹€. 

λ³€μˆ˜λŠ” μžμ‹ μ΄ λ“±λ‘λœ μŠ€μ½”ν”„κ°€ μ†Œλ©Έλ  λ•ŒκΉŒμ§€ μœ νš¨ν•˜λ‹€. ν• λ‹Ήλœ λ©”λͺ¨λ¦¬ 곡간은 더 이상 μ°Έμ‘°λ˜μ§€ μ•ŠμœΌλ©΄ 가비지 μ½œλ ‰ν„°μ— μ˜ν•΄ ν•΄μ œλ˜μ„œ κ°€μš© λ©”λͺ¨λ¦¬ 풀에 λ°˜ν™˜λœλ‹€. 

 

 

var x = 'global';
function foo(){
    console.log(x); // undefined
    var x = 'local';
}
foo();
console.log(x); // global

πŸ‘‰ foo ν•¨μˆ˜ 내뢀에 μ„ μ–Έλœ 지역 λ³€μˆ˜ xλŠ” undefined둜 μ΄ˆκΈ°ν™”λœ μƒνƒœμ΄λ‹€. λ³€μˆ˜ 할당문이 μ‹€ν–‰λ˜κΈ° μ „κΉŒμ§€λŠ” undefined 값을 κ°–λŠ”λ‹€. 

 

β˜… 이처럼 ν˜Έμ΄μŠ€νŒ…μ€ μŠ€μ½”ν”„λ₯Ό λ‹¨μœ„λ‘œ λ™μž‘ν•œλ‹€. β˜…

 

 


βœ”οΈ μ „μ—­ λ³€μˆ˜μ˜ 문제점

  • 암묡적 κ²°ν•©

μ „μ—­ λ³€μˆ˜λ₯Ό μ„ μ–Έν•œλ‹€λŠ” 것은 λͺ¨λ“  μ½”λ“œκ°€ μ „μ—­ λ³€μˆ˜λ₯Ό μ°Έμ‘°ν•˜κ³  λ³€κ²½ν•  수 μžˆλŠ” 암묡적 결합을 ν—ˆμš©ν•˜λŠ” 것인데, λ³€μˆ˜μ˜ 유효 λ²”μœ„κ°€ μ»€μ§€κ²Œ 되면 μ½”λ“œμ˜ 가독성이 λ‚˜λΉ μ§€κ³  μ˜λ„μΉ˜ μ•Šκ²Œ μƒνƒœκ°€ 변경될 수 μžˆλŠ” μœ„ν—˜μ„±λ„ 높아진닀. 

  • κΈ΄ 생λͺ… μ£ΌκΈ°

μ „μ—­ λ³€μˆ˜μ˜ 생λͺ… μ£ΌκΈ°κ°€ κΈΈκΈ° λ•Œλ¬Έμ— μ˜λ„μΉ˜ μ•Šκ²Œ μ „μ—­ λ³€μˆ˜μ˜ μƒνƒœλ₯Ό λ³€κ²½ν•  κ°€λŠ₯성도 컀진닀. 

  • μŠ€μ½”ν”„ 체인 μƒμ—μ„œ 쒅점에 쑴재

μ „μ—­ λ³€μˆ˜λŠ” μŠ€μ½”ν”„ 체인 상 쒅점에 μ‘΄μž¬ν•˜λŠ”λ°, λ³€μˆ˜λ₯Ό 검색할 λ•Œ μ „μ—­ λ³€μˆ˜κ°€ κ°€μž₯ λ§ˆμ§€λ§‰μ— κ²€μƒ‰λœλ‹€λŠ” 것을 λ§ν•œλ‹€. (검색 속도가 λŠλ¦¬λ‹€.)

  • λ„€μž„μŠ€νŽ˜μ΄μŠ€ μ˜€μ—Ό

μžλ°”μŠ€ν¬λ¦½νŠΈ 파일이 λΆ„λ¦¬λ˜μ—ˆλ”λΌλ„ ν•˜λ‚˜μ˜ μ „μ—­ μŠ€μ½”ν”„λ₯Ό κ³΅μœ ν•˜κΈ° λ•Œλ¬Έμ— μ˜ˆμƒμΉ˜ λͺ»ν•œ κ²°κ³Όλ₯Ό 가지고 올 수 μžˆλ‹€. 

 


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

1. μ¦‰μ‹œ μ‹€ν–‰ ν•¨μˆ˜

 

2. λ„€μž„μŠ€νŽ˜μ΄μŠ€ 객체

λ„€μž„μŠ€νŽ˜μ΄μŠ€ 객체 μžμ²΄κ°€ μ „μ—­ λ³€μˆ˜μ— ν• λ‹Ήλ˜μ„œ 많이 μ“°μ΄λŠ” 방법은 μ•„λ‹ˆλ‹€. 

 

3. λͺ¨λ“ˆ νŒ¨ν„΄

μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ ν΄λ‘œμ €λ₯Ό 기반으둜 λ™μž‘ν•œλ‹€. (μΊ‘μŠν™”κΉŒμ§€ κ΅¬ν˜„κ°€λŠ₯)

 

4. ES6 λͺ¨λ“ˆ

ES6 λͺ¨λ“ˆμ€ 파일 자체의 λ…μžμ μΈ λͺ¨λ“ˆ μŠ€μ½”ν”„λ₯Ό μ œκ³΅ν•œλ‹€. 

 

 

πŸ‘©‍πŸ’» λͺ¨λ˜ μžλ°”μŠ€ν¬λ¦½νŠΈ Deep Diveλ₯Ό μ •λ…ν•˜κ³  μ œκ°€ μ΄ν•΄ν•œ λ‚΄μš©μ„ μ •λ¦¬ν•œ κΈ€μž…λ‹ˆλ‹€ πŸ‘©‍πŸ’»