λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

λ…μ„œ λͺ©λ‘/λͺ¨λ”₯λ‹€ Modern JS Deep Dive

[λͺ¨λ”₯λ‹€] 14μž₯ μ „μ—­ λ³€μˆ˜μ˜ 문제점

728x90

 

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

 

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

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

- λ³€μˆ˜λŠ” 선언에 μ˜ν•΄ μƒμ„±λ˜κ³  할당을 톡해 값을 κ°–κ²Œ 되며 μ–Έμ  κ°€ μ†Œλ©Έν•¨. 

- λ³€μˆ˜λŠ” μžμ‹ μ΄ μ„ μ–Έλœ μœ„μΉ˜μ—μ„œ μƒμ„±λ˜κ³  μ†Œλ©Έν•¨.

- λ³€μˆ˜ 선언은 λŸ°νƒ€μž„μ΄ μ•„λ‹ˆλΌ, λŸ°νƒ€μž„ 이전 λ‹¨κ³„μ—μ„œ 싀행됨. (μ „μ—­λ³€μˆ˜ ν•œμ •)

- 지역 λ³€μˆ˜λŠ” ν•¨μˆ˜κ°€ 호좜 될 λ•Œ 선언됨 -> μ§€μ—­λ³€μˆ˜μ˜ 생λͺ… μ£ΌκΈ° === ν•¨μˆ˜μ˜ 생λͺ… μ£ΌκΈ°

- λ³€μˆ˜μ˜ 생λͺ… μ£ΌκΈ° : λ©”λͺ¨λ¦¬ 곡간이 ν™•λ³΄λœ μ‹œμ λΆ€ν„° λ©”λͺ¨λ¦¬ 곡간이 ν•΄μ œλ˜μ–΄ κ°€μš© λ©”λͺ¨λ¦¬ 풀에 λ°˜ν™˜λ˜λŠ” μ‹œμ κΉŒμ§€

=> λ³€μˆ˜λŠ” μžμ‹ μ΄ λ“±λ‘λœ μŠ€μ½”ν”„κ°€ μ†Œλ©Έλ  λ•ŒκΉŒμ§€ μœ νš¨ν•¨.

- ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ λ³€μˆ˜ μ„ μ–Έ 이전에 λ³€μˆ˜λ₯Ό μ‚¬μš©ν•œλ‹€λ©΄ -> ν•¨μˆ˜ λ‚΄μ˜ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” 게 맞고 λŒ€μ‹  undefined λ₯Ό κ°–κ³  있음.

(ν˜Έμ΄μŠ€νŒ… -> μŠ€μ½”ν”„ λ‹¨μœ„λ‘œ λ™μž‘)

 

14.1.2 μ „μ—­ λ³€μˆ˜μ˜ 생λͺ… μ£ΌκΈ°

- μ „μ—­ μ½”λ“œλŠ” λͺ…μ‹œμ μΈ 호좜 없이 싀행됨.

-> ν•¨μˆ˜ 호좜처럼 μ‹€ν–‰ν•˜λŠ” νŠΉλ³„ν•œ μ§„μž…μ μ΄ μ—†κ³ , μ½”λ“œκ°€ λ‘œλ“œλ˜μž 마자 κ³§λ°”λ‘œ 해석 & 싀행됨.

- λ§ˆμ§€λ§‰ 문이 μ‹€ν–‰λ˜μ–΄, 더 이상 μ‹€ν–‰ν•  문이 없을 λ•Œ μ’…λ£Œν•¨.

- μ „μ—° 객체: μ½”λ“œ μ‹€ν–‰ μ „ 단계에 JS 엔진에 μ˜ν•΄ μ–΄λ–€ 객체보닀도 λ¨Όμ € μƒμ„±λ˜λŠ” νŠΉμˆ˜λž€ 객체.

(λΈŒλΌμš°μ €μ˜ window, Node.js의 global 객체λ₯Ό 의미) => ES11 : globalThis 둜 이름 톡일됨.

 

- var ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ μ „μ—­λ³€μˆ˜λŠ” μ›ΉνŽ˜μ΄μ§€λ₯Ό 닫을 λ•ŒκΉŒμ§€ 유효 => μ „μ—­ 객체의 생λͺ…주기와 μΌμΉ˜ν•¨.

 

 

 

 

 

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

 

(1) 암묡적 κ²°ν•©

- λͺ¨λ“  μ½”λ“œκ°€ μ „μ—­ λ³€μˆ˜λ₯Ό μ°Έμ‘°ν•  수 있고 λ³€κ²½ν•˜λŠ” κ±Έ ν—ˆμš©. 

- λ³€μˆ˜μ˜ μœ νš¨λ²”μœ„κ°€ 클수둝 μ½”λ“œμ˜ 가독성 λ‚˜λΉ μ§€κ³ , μ˜λ„μΉ˜ μ•Šκ²Œ μƒνƒœκ°€ 변경될 μœ„ν—˜μ„±λ„ 높아짐.

 

(2) κΈ΄ 생λͺ… μ£ΌκΈ°

- 생λͺ…μ£ΌκΈ°κ°€ κΈΈλ‹€ -> λ©”λͺ¨λ¦¬ λ¦¬μ†ŒμŠ€λ„ 였랜 κΈ°κ°„ μ†ŒλΉ„ν•¨. & μ „μ—­ λ³€μˆ˜μ˜ μƒνƒœλ₯Ό λ³€κ²½ν•  수 μžˆλŠ” μ‹œκ°„, κΈ°νšŒκ°€ 많음.

- μž¬ν• λ‹Ήμ΄ κ°€λŠ₯ν•΄μ„œ μœ„ν—˜λ„ 올라감.

 

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

- λ³€μˆ˜ 검색 μ‹œ κ°€μž₯ λ§ˆμ§€λ§‰μ— 검색됨 => μ „μ—­ λ³€μˆ˜μ˜ 검색 속도가 κ°€μž₯ 느림

 

(4) λ„€μž„μŠ€νŽ˜μ΄μŠ€ μ˜€μ—Ό

- 파일이 λΆ„λ¦¬λ˜μ–΄λ„ ν•˜λ‚˜μ˜ μ „μ—­ μŠ€μ½”λ₯΄λ₯Ό κ³΅μœ ν•¨ -> λ‹€λ₯Έ νŒŒμΌμ— 같은 이름이 μ‘΄μž¬ν•˜λ©΄ μ˜ˆμƒμΉ˜ λͺ»ν•œ κ²°κ³Ό 생김

 

 

 

 

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

 

- μ „μ—­λ³€μˆ˜λ₯Ό λ°˜λ“œμ‹œ μ‚¬μš©ν•΄μ•Ό ν•˜λŠ” μ΄μœ κ°€ μ—†μœΌλ©΄ μ‚¬μš©ν•˜μ§€ 말것

- λ³€μˆ˜μ˜ μŠ€μ½”ν”„λŠ” 쒁을 수둝 μ’‹λ‹€.

 

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

 

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

- λͺ¨λ“  μ½”λ“œλ₯Ό μ¦‰μ‹œ μ‹€ν–‰ ν•¨μˆ˜λ‘œ 감싸면 λͺ¨λ“  λ³€μˆ˜λŠ” μ¦‰μ‹œ μ‹€ν–‰ν•¨μˆ˜μ˜ λ³€μˆ˜κ°€ 됨. 

 

 

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

- λ„€μž„ 슀페이슀λ₯Ό λ‹΄λ‹Ήν•˜λŠ” 객체λ₯Ό 생성 -> μ „μ—­ λ³€μˆ˜μ²˜λŸΌ μ‚¬μš©ν•˜κ³  싢은 λ³€μˆ˜λ₯Ό ν”„λ‘œνΌν‹°λ‘œ μΆ”κ°€ν•˜κΈ°

 

 

14.3.3 λͺ¨λ“ˆ νŒ¨ν„΄

- λͺ¨λ“ˆ νŒ¨ν„΄ : μ „μ—­ λ³€μˆ˜μ˜ μ–΅μ œλŠ” λ¬Όλ‘  μΊ‘μŠν™”κΉŒμ§€ κ΅¬ν˜„μ΄ κ°€λŠ₯. ν΄λ‘œμ € 기반으둜 λ™μž‘ν•¨. 

μΊ‘μŠν™”

: 객체의 μƒνƒœλ₯Ό λ‚˜νƒ€λ‚΄λŠ” ν”„λ‘œνΌν‹° & ν”„λ‘œνΌν‹°λŠ” μ°Έμ‘°ν•˜κ³  μ‘°μž‘ν•  수 μžˆλŠ” λ™μž‘ λ§€μ„Έλ“œλ₯Ό ν•˜λ‚˜λ„ λ¬ΆλŠ” 것. 

정보 은닉 μœΌλ‘œλ„ μ‚¬μš©ν•¨. == 객체의 νŠΉμ • ν”„λ‘œνΌν‹°λ‚˜ λ§€μ„œλ“œλ₯Ό 감좜 λͺ©μ μœΌλ‘œλ„ μ‚¬μš©ν•¨. 

 JSλŠ” μ ‘κ·Ό μ œν•œμž μ—†κΈ° λ•Œλ¬Έμ— λͺ¨λ“ˆ νŒ¨ν„΄ μ‚¬μš©ν•¨. 

 

 

14.3.4 ES6 λͺ¨λ“ˆ

ES6 λͺ¨λ“ˆμ„ μ‚¬μš©ν•˜λ©΄ μ „μ—­ λ³€μˆ˜ μ‚¬μš©ν•  수 μ—†μŒ.

<script type="module" src="index.mjs></script>

πŸ‘† μ‚¬μš©ν•˜λ©΄ JS νŒŒμΌμ€ λͺ¨λ“ˆλ‘œμ„œ λ™μž‘ν•¨.

μ•„μ§κΉŒμ§€λŠ” ES6 λͺ¨λ“ˆ λ³΄λ‹€λŠ” Webpack λ“±μ˜ λͺ¨λ“ˆ λ²ˆλ“€λŸ¬λ₯Ό μ‚¬μš©ν•˜λŠ” 것이 일반적.

 

728x90
λ°˜μ‘ν˜•