🀍 은지log 🀍

μŠ€μ½”ν”„ (Scope) λ³Έλ¬Έ

πŸ’œ λͺ¨λ˜Javascript

μŠ€μ½”ν”„ (Scope)

Eun_zii 2022. 9. 28. 14:22

λͺ¨λ“  μ‹λ³„μž( λ³€μˆ˜μ΄λ¦„, ν•¨μˆ˜μ΄λ¦„, 클래슀 이름 λ“±)λŠ” μžμ‹ μ΄ μ„ μ–Έλœ μœ„μΉ˜μ— μ˜ν•΄ λ‹€λ₯Έ μ½”λ“œκ°€ μ‹λ³„μž μžμ‹ μ„ μ°Έμ‘°ν• μˆ˜ μžˆλŠ” μœ νš¨λ²”μœ„κ°€ κ²°μ • λœλ‹€. μŠ€μ½”ν”„λŠ” μ‹λ³„μžκ°€ μœ νš¨ν•œ λ²”μœ„λ₯Ό λ§ν•œλ‹€.

  • μ‹λ³„μžλŠ” μ–΄λ–€ 값을 ꡬ별할 수 μžˆμ–΄μ•Ό ν•˜λ―€λ‘œ μœ μΌ ν•΄μ•Ό ν•œλ‹€.

μ „μ—­κ³Ό μ „μ—­ μŠ€μ½”ν”„ ( Global Scope )

μ „μ—­μ΄λž€ μ½”λ“œμ˜ κ°€μž₯ λ°”κΉ₯ μ˜μ—­μ„ λ§ν•˜κ³  μ „μ—­ μŠ€μ½”ν”„λ₯Ό λ§Œλ“ λ‹€

  • μ „μ—­λ³€μˆ˜λŠ” μ–΄λ””μ„œλ“ μ§€ μ°Έμ‘°ν•  수 μžˆλ‹€.

지역과 지역 μŠ€μ½”ν”„ ( Local Scope )

μ§€μ—­μ΄λž€ ν•¨μˆ˜ λͺΈμ²΄ λ‚΄λΆ€λ₯Ό λ§ν•˜κ³  지역 μŠ€μ½”ν”„λ₯Ό λ§Œλ“ λ‹€

  • μ§€μ—­λ³€μˆ˜λŠ” μžμ‹ μ˜ 지역 μŠ€μ½”ν”„μ™€ ν•˜μœ„ 지역 μŠ€μ½”ν”„μ—μ„œ 유효 ν•˜λ‹€.
  • ⭐️ μ•ˆμ—μ„œλŠ” 밖을 λ³Ό 수 μžˆμ§€λ§Œ λ°–μ—μ„œλŠ” μ•ˆμ„ λ³Ό 수 μ—†κ³  접근이 μ•ˆλœλ‹€. 

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

μ „μ—­λ³€μˆ˜μ˜ λ¬΄λΆ„λ³„ν•œ μ‚¬μš©μ€ μœ„ν—˜ν•˜λ‹€. μ „μ—­ λ³€μˆ˜λ₯Ό λ°˜λ“œμ‹œ μ‚¬μš©ν•΄μ•Ό ν•  이유λ₯Ό 찾지 λͺ»ν•œλ‹€λ©΄ 지역 λ³€μˆ˜λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.

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

  • 지역 λ³€μˆ˜μ˜ 생λͺ…μ£ΌκΈ°λŠ” ν•¨μˆ˜μ˜ 생λͺ… 주기와 μΌμΉ˜ν•œλ‹€.

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

μ „μ—­ μ½”λ“œλŠ” ν•¨μˆ˜ 호좜과 같이 μ „μ—­ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λŠ” νŠΉλ³„ν•œ μ§„μž…μ μ΄ μ—†κ³  μ½”λ“œκ°€ λ‘œλ“œλ˜μžλ§ˆμž κ³§λ°”λ‘œ ν•΄μ„λ˜κ³  μ‹€ν–‰λœλ‹€.

ν•¨μˆ˜λŠ” ν•¨μˆ˜ λͺΈμ²΄μ˜ λ§ˆμ§€λ§‰ λ¬Έ λ˜λŠ” λ°˜ν™˜λ¬Έμ΄ μ‹€ν–‰λ˜λ©΄ μ’…λ£Œν•œλ‹€.

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

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

1. 암묡적 κ²°ν•©

μ „μ—­ λ³€μˆ˜λ₯Ό μ„ μ–Έν•œ μ˜λ„λŠ” μ½”λ“œ μ–΄λ””μ„œλ“  μ°Έμ‘°ν•˜κ³  ν• λ‹Ήν• μˆ˜ μžˆλŠ” λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜κ² λ‹€λŠ” 것이닀. μ΄λŠ” λͺ¨λ“  μ½”λ“œκ°€ μ „μ—­ λ³€μˆ˜λ₯Ό μ°Έμ‘°ν•˜κ³  λ³€κ²½ν• μˆ˜ μžˆλŠ” 암묡적 결합을 ν—ˆμš©ν•˜λŠ” 것이닀.

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

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

μ „μ—­ λ³€μˆ˜λŠ” 생λͺ… μ£ΌκΈ°κ°€ κΈΈλ‹€. λ”°λΌμ„œ λ©”λͺ¨λ¦¬ λ¦¬μ†Œλ“œλ„ 였랜 κΈ°κ°„ μ†ŒλΉ„ν•œλ‹€. λ˜ν•œ μ „μ—­ λ³€μˆ˜μ˜ μƒνƒœλ₯Ό λ³€κ²½ ν•  수 μžˆλŠ” μ‹œκ°„λ„ κΈΈκ³  κΈ°νšŒλ„ λ§Žλ‹€.
var ν‚€μ›Œλ“œλŠ” λ³€μˆ˜μ˜ 쀑볡 선언을 ν—ˆμš©ν•˜λ―€λ‘œ 생λͺ… μ£ΌκΈ°κ°€ κΈ΄ μ „μ—­ λ³€μˆ˜λŠ” λ³€μˆ˜ 이름이 쀑볡될 κ°€λŠ₯성이 μžˆλ‹€. λ³€μˆ˜ 이름이 μ€‘λ³΅λ˜λ©΄ μ˜λ„μΉ˜ μ•Šμ€ μž¬ν• λ‹Ήμ΄ 이뀄진닀.

  • 지역 λ³€μˆ˜λŠ” μ „μ—­ λ³€μˆ˜λ³΄λ‹€ 생λͺ… μ£ΌκΈ°κ°€ 훨씬 짧닀. μ „μ—­ λ³€μˆ˜λ³΄λ‹€ μƒνƒœ 변경에 μ˜ν•œ 였λ₯˜κ°€ λ°œμƒν•  ν™•λ₯ μ΄ μž‘λ‹€λŠ” 것을 μ˜λ―Έν•œλ‹€.

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

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

 

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

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

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

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

let MYAPP = {}; // μ „μ—­ λ„€μž„μŠ€νŽ˜μ΄μŠ€ 객체
MYAPP.name = 'Lee';
console.log(MYAPP.name); // Lee

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

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

 

πŸ“ μΊ‘μŠν™” λŠ” 객체의 μƒνƒœλ₯Ό λ‚˜νƒ€λ‚΄λŠ” ν”„λ‘œνΌν‹°μ™€ ν”„λ‘œνΌν‹°λ₯Ό μ°Έμ‘°ν•˜κ³  μ‘°μž‘ν• μˆ˜ μžˆλŠ” λ™μž‘μΈ λ©”μ„œλ“œλ₯Ό ν•˜λ‚˜λ‘œ λ¬ΆλŠ” 것을 λ§ν•œλ‹€. 객체의 νŠΉμ • ν”„λ‘œνΌν‹°λ‚˜ λ©”μ„œλ“œλ₯Ό 감좜 λͺ©μ μœΌλ‘œ μ‚¬μš©ν•˜κΈ°λ„ ν•˜λŠ”λ° 이λ₯Ό μ •λ³΄μ€λ‹‰ μ΄λΌ ν•œλ‹€.
μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” public, private, protectedλ“±μ˜ μ ‘κ·Ό μ œν•œμžλ₯Ό μ œκ³΅ν•˜μ§€ μ•ŠλŠ”λ‹€. λͺ¨λ“ˆ νŒ¨ν„΄μ€ μ „μ—­ λ„€μž„μŠ€νŽ˜μ΄μŠ€μ˜ μ˜€μ—Όμ„ λ§‰λŠ” κΈ°λŠ₯은 물둜 ν•œμ •μ μ΄κΈ°λŠ” ν•˜μ§€λ§Œ 정보 은닉을 κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄μ„œ μ‚¬μš©ν•œλ‹€. 

4. ES6 λͺ¨λ“ˆ

ES6 λͺ¨λ“ˆμ„ μ‚¬μš©ν•˜λ©΄ 더이상 μ „μ—­ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•  수 μ—†λ‹€. ES6 λͺ¨λ“ˆμ€ 파일자체의 λ…μžμ μΈ λͺ¨λ“ˆ μŠ€μ½”ν”„λ₯Ό μ œκ³΅ν•œλ‹€. λ”°λΌμ„œ λͺ¨λ“ˆ λ‚΄μ—μ„œ var ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ λ³€μˆ˜λŠ” λ”λŠ” μ „μ—­ λ³€μˆ˜κ°€ μ•„λ‹ˆλ©° window객체의 ν”„λ‘œνΌν‹°λ„ μ•„λ‹ˆλ‹€.

728x90