Javascript 곡뢀

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

tnqlscho 95 2023. 7. 29. 08:38

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

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

1. λ³€μˆ˜λŠ” 선언에 μ˜ν•΄ μƒμ„±λ˜κ³  할당을 톡해 값을 κ°–κ³  μ–Έμ  κ°€ μ†Œλ©Έν•˜λŠ” 생λͺ…μ£ΌκΈ°λ₯Ό κ°€μ§€κ³  μžˆλ‹€.

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

4. μ§€μ—­λ³€μˆ˜μ˜ 생λͺ… μ£ΌκΈ° = ν•¨μˆ˜μ˜ 생λͺ…μ£ΌκΈ°

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

1. μ „μ—­ μ½”λ“œλŠ” λͺ…μ‹œμ μΈ 호좜 없이 μ‹€ν–‰λœλ‹€.

2. μ „μ—­ μ½”λ“œμ—λŠ” λ°˜ν™˜λ¬Έμ„ μ‚¬μš©ν•  수 μ—†μ–΄μ„œ λ§ˆμ§€λ§‰ 문이 μ‹€ν–‰λ˜μ„œ 더이상 싀행될 문이 μ—†μ„λ•Œ μ’…λ£Œλœλ‹€.

3. μ „μ—­λ³€μˆ˜μ˜ 생λͺ… μ£ΌκΈ° = μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 생λͺ… μ£ΌκΈ°

4. var ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ μ „μ—­ λ³€μˆ˜μ˜ 생λͺ…μ£ΌκΈ°λŠ” μ „μ—­ 객체의 생λͺ… 주기와 일치.

 

 

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

1. 암묡적 κ²°ν•©

μ „μ—­ λ³€μˆ˜μ˜ μ„ μ–Έν•œ μ˜λ„λŠ” λͺ¨λ“  μ½”λ“œκ°€ μ „μ—­ λ³€μˆ˜λ₯Ό μ°Έμ‘°ν•˜κ³  λ³€κ²½ν•  수 μžˆλŠ” 암묡적 결합을 ν—ˆμš©ν•˜λŠ”κ²ƒ.

ν•˜μ§€λ§Œ λ³€μˆ˜μ˜ μœ νš¨λ²”μœ„κ°€ 클수둝 가독성이 λ‚˜λΉ μ§€κ³  μƒνƒœκ΄€λ¦¬μ˜ μœ„ν—˜μ„±λ„ λ†’μ•„μ§„λ‹€.

 

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

μ „μ—­ λ³€μˆ˜μ˜ 생λͺ…μ£ΌκΈ°λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 생λͺ… 주기와 κ°™κΈ°λ•Œλ¬Έμ— 생λͺ…μ£ΌκΈ°κ°€ κΈΈλ‹€.

κ·Έλž˜μ„œ λ©”λͺ¨λ¦¬ λ¦¬μ†ŒμŠ€λ„ 였랜 κΈ°κ°„ μ†ŒλΉ„ν•˜κ³  특히 var ν‚€μ›Œλ“œλŠ” μž¬μ„ μ–Έ, μž¬ν• λ‹Ήμ΄ κ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ—

λ³€μˆ˜ 이름이 쀑볡될 수 μžˆμ–΄μ„œ μ˜λ„μΉ˜μ•ŠλŠ” μž¬ν• λ‹Ήμ΄ 될 수 μžˆμ–΄ μƒνƒœκ΄€λ¦¬ μœ„ν—˜μ„±λ„ λ†’μ•„μ§„λ‹€.

 

3. μŠ€μ½”ν”„μ²΄μΈ μƒμ—μ„œ 쒅점에 쑴재

쒅점에 μ‘΄μž¬ν•˜κΈ° λ•Œλ¬Έμ— λ³€μˆ˜λ₯Ό 검색할 λ•Œ μ „μ—­ λ³€μˆ˜κ°€ κ°€μž₯ λ§ˆμ§€λ§‰μ— κ²€μƒ‰λœλ‹€.

κ·Έλž˜μ„œ 검색속도가 κ°€μž₯ λŠλ¦¬λ‹€.

 

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

JSλŠ” 파일이 λΆ„λ¦¬λ˜μ–΄ μžˆμ–΄λ„ ν•˜λ‚˜μ˜ μ „μ—­ μŠ€μ½”ν”„λ₯Ό κ³΅μœ ν•œλ‹€.

κ·Έλž˜μ„œ λ‹€λ₯Έ νŒŒμΌμ—μ„œ λ™μΌν•œ μ΄λ¦„μœΌλ‘œ μ „μ—­ λ³€μˆ˜,ν•¨μˆ˜κ°€ 같은 μŠ€μ½”ν”„μ— μ‘΄μž¬ν•˜λ©΄ μ˜ˆμƒν•˜μ§€ λͺ»ν•˜λŠ” κ²°κ³Όκ°€ 생길 수 μžˆλ‹€.

 

πŸ‘€  μ „μ—­ λ³€μˆ˜ μ–΅μ œν•˜κΈ°

1. μ „μ—­ λ³€μˆ˜λ₯Ό λ°˜λ“œμ‹œ μ‚¬μš©ν•  μ΄μœ κ°€ μ—†λ‹€λ©΄ μ§€μ—­ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•œλ‹€.

2. λ³€μˆ˜μ˜ μŠ€μ½”ν”„λŠ” μ’μ„μˆ˜λ‘ μ’‹λ‹€.

 

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

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

(function (){
   var foo = 10; // μ¦‰μ‹œ μ‹€ν–‰ ν•¨μˆ˜μ˜ μ§€μ—­ λ³€μˆ˜
}());

console.log(foo); // foo is not defined

라이브러리 등에 자주 μ‚¬μš©λœλ‹€.

 

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

전역에 λ„€μž„μŠ€νŽ˜μ΄μŠ€ 역할을 λ‹΄λ‹Ήν•  객체λ₯Ό 생성 ν›„ μ „μ—­ λ³€μˆ˜μ²˜λŸΌ μ‚¬μš©ν•˜κ³  싢은 λ³€μˆ˜λ₯Ό

ν”„λ‘œνΌν‹°λ‘œ μΆ”κ°€ν•œλ‹€.

var MYAPP = {}; // μ „μ—­ λ„€μž„μŠ€νŽ˜μ΄μŠ€ 객체

MYAPP.name = 'Lee';

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

λ„€μž„ 슀페이슀 객체 μžμ²΄κ°€ μ „μ—­ λ³€μˆ˜μ— ν• λ‹Ήλ˜μ„œ μœ μš©ν•œ 방법은 μ•„λ‹ˆλ‹€.

 

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

1. 클래슀λ₯Ό λͺ¨λ°©ν•΄ 관련이 μžˆλŠ” λ³€μˆ˜μ™€ ν•¨μˆ˜λ₯Ό λͺ¨μ•„ μ¦‰μ‹œ μ‹€ν–‰ ν•¨μˆ˜λ‘œ 감싸 ν•˜λ‚˜μ˜ λͺ¨λ“ˆμ„ λ§Œλ“ λ‹€.

2. ν΄λ‘œμ €λ₯Ό 기반으둜 λ™μž‘ν•œλ‹€.

3. μ „μ—­ λ³€μˆ˜μ˜ μ—­μ œμ™€ μΊ‘μŠν™”κΉŒμ§€ κ°€λŠ₯ν•˜λ‹€.

4. μΊ‘μŠν™”λŠ” ν”„λ‘œνΌν‹°μ™€ ν”„λ‘œνΌν‹°λ₯Ό μ°Έμ‘°ν•˜κ³  μ‘°μž‘ν•  수 μžˆλŠ” λ™μž‘μΈ λ©”μ„œλ“œλ₯Ό ν•˜λ‚˜λ‘œ λ¬ΆλŠ”κ²ƒ.

5. μΊ‘μŠν™”λŠ” 객체의 νŠΉμ • ν”„λ‘œνΌν‹°λ‚˜ λ©”μ„œλ“œλ₯Ό 감좜 λͺ©μ μœΌλ‘œ μ‚¬μš©ν•΄ 정보 은닉을 ν•  수 μžˆλ‹€.

 

🟣 ES6 λͺ¨λ“ˆ

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

2. κ·Έλž˜μ„œ ES6 λͺ¨λ“ˆμ—μ„œλŠ” μ „μ—­ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•  수 μ—†λ‹€.

3. var ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ λ³€μˆ˜λŠ” 더이상 μ „μ—­ λ³€μˆ˜κ°€ μ•„λ‹ˆκ³  window 객체의 ν”„λ‘œνΌν‹°λ„ μ•„λ‹ˆλ‹€.

4. script νƒœκ·Έμ— type='module'μ–΄νŠΈλ¦¬λ·°νŠΈλ₯Ό μΆ”κ°€ν•˜λ©΄ λ‘œλ“œλœ JSνŒŒμΌμ€ λͺ¨λ“ˆλ‘œ λ™μž‘ν•œλ‹€.

5. ν™•μž₯μžλŠ” mjsλ₯Ό ꢌμž₯.

6. νŠΈλžœμŠ€νŒŒμΌλ§μ΄λ‚˜ λ²ˆλ“€λ§μ΄ ν•„μš”ν•˜κΈ° λ•Œλ¬Έμ— 아직은 webpackλ“±μ˜ λͺ¨λ“ˆ λ²ˆλ“€λŸ¬λ₯Ό μ‚¬μš©ν•œλ‹€.