Scopeλž€?

LemonΒ·2022λ…„ 4μ›” 29일
0
post-thumbnail

ScopeλŠ” λ³€μˆ˜κ°€ μ–΄λ””κΉŒμ§€ 쓰일 수 μžˆλŠ”μ§€μ˜ λ²”μœ„λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€.
즉, λ³€μˆ˜κ°€ μ„ μ–Έλ˜κ³  μ‚¬μš©ν•  수 μžˆλŠ” κ³΅κ°„μž…λ‹ˆλ‹€.


πŸ“¦μ§€μ—­ λ³€μˆ˜(local Variable)

Block : μ€‘κ΄€ν˜Έ {}둜 감싸진 것을 block이라고 ν•©λ‹ˆλ‹€.

{} λ‚΄λΆ€λ₯Ό Block Scope라고 ν•©λ‹ˆλ‹€.

Block Scopeμ—μ„œ λ³€μˆ˜κ°€ μ •μ˜λ˜λ©΄ κ·Έ λ³€μˆ˜λŠ” μ˜€λ‘œμ§€ Block Scope λ‚΄λΆ€μ—μ„œλ§Œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
μ΄λ ‡κ²Œ Block Scope λ‚΄λΆ€μ—μ„œ μ •μ˜λœ λ³€μˆ˜λŠ” 지역 λ³€μˆ˜(local Variable)라고 λΆ€λ¦…λ‹ˆλ‹€.

🌎 μ „μ—­ λ³€μˆ˜ (global variable)

Block Scope 밖을 Global Scope라고 ν•©λ‹ˆλ‹€. Global Scopeμ—μ„œ λ§Œλ“  λ³€μˆ˜λŠ” μ „μ—­ λ³€μˆ˜λΌκ³  ν•©λ‹ˆλ‹€. μ „μ—­ λ³€μˆ˜λŠ” μ½”λ“œ μ–΄λ””μ„œλ“  접근이 κ°€λŠ₯ν•©λ‹ˆλ‹€.

colorλŠ” block scope λ°–μ—μ„œ μ„ μ–Έλœ λ³€μˆ˜μ΄κΈ° λ•Œλ¬Έμ— μ „μ—­λ³€μˆ˜μž…λ‹ˆλ‹€.
λ”°λΌμ„œ block scope 인 returnColor의 μ•ˆμ—μ„œλ„ 접근이 κ°€λŠ₯ν•©λ‹ˆλ‹€.

πŸ™…πŸ»β€β™€οΈScope의 μ˜€μ—Ό

μ „μ—­ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄ μ•„λ¬΄κ³³μ—μ„œλ‚˜ μ ‘κ·Όν•˜κΈ° μ‰½μ§€λ§Œ, 그만큼 λ‚¨μš©ν•˜λ©΄ ν”„λ‘œκ·Έλž¨μ— 문제λ₯Ό μΌμœΌν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.
μ „μ—­ λ³€μˆ˜λŠ” μ„ μ–Έν•˜λ©΄ ν•΄λ‹Ή ν”„λ‘œκ·Έλž¨ μ–΄λ””μ„œλ‚˜ μ‚¬μš©ν•  수 μžˆλŠ” global namespaceλ₯Ό κ°–μŠ΅λ‹ˆλ‹€.

* namespaceλΌλŠ” 것은 λ³€μˆ˜ 이름을 μ‚¬μš©ν•  수 μžˆλŠ” λ²”μœ„λΌλŠ” λœ»μž…λ‹ˆλ‹€.

μ „μ—­λ³€μˆ˜λŠ” ν”„λ‘œκ·Έλž¨μ΄ μ’…λ£Œλ  λ•Œ κΉŒμ§€ μ‚΄μ•„μžˆμŠ΅λ‹ˆλ‹€.
μ§€μ—­λ³€μˆ˜λŠ” block이 λλ‚˜λ©΄ 더 이상 λ³€μˆ˜κ°€ μ‚΄μ•„μžˆμ§€ μ•Šμ•„μ„œ μ“Έ 수 μ—†μŠ΅λ‹ˆλ‹€.
μ „μ—­λ³€μˆ˜κ°€ 계속 μ‚΄μ•„μ„œ λ³€μˆ˜κ°’μ΄ 계속 λ³€ν•œλ‹€λ©΄ ν•΄λ‹Ή λ³€μˆ˜λ₯Ό νŠΈλž˜ν‚Ήν•˜κΈ° μ–΄λ ΅κ³ , μˆ˜λ§Žμ€ μ½”λ“œ 쀑에 ν•΄λ‹Ή μ „μ—­λ³€μˆ˜κ°€ μ–΄λ””μ„œ μ„ μ–ΈλλŠ”μ§€λ₯Ό μ°Ύμ•„μ•Όν•©λ‹ˆλ‹€.

μ•„λž˜λŠ” Scope μ˜€μ—Όμ˜ λŒ€ν‘œμ μΈ μ˜ˆμ‹œμž…λ‹ˆλ‹€.

  • starsΒ μ΄λΌλŠ” μ „μ—­ λ³€μˆ˜κ°€ μžˆμ—ˆμŠ΅λ‹ˆλ‹€.
  • callMyNightSkyΒ ν•¨μˆ˜ μƒˆλ‘œμš΄ λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜λ €κ³  ν–ˆλŠ”λ° μ‹€μˆ˜λ‘œ letΒ ν‚€μ›Œλ“œλ₯Ό μž‘μ„±ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.
  • μ „μ—­λ³€μˆ˜μΈ stars의 λ°”λ€Œμ–΄λ²„λ €μ„œ μ›ν•˜μ§€ μ•Šμ•˜λ˜ 값인 β€œSirius”가 μ‚¬μš©λ˜λ²„λ ΈμŠ΅λ‹ˆλ‹€..!!😱

μ˜ˆμ‹œμ˜ μ½”λ“œλŠ” μ•„μ£Ό μ§§μ§€λ§Œ, ν˜„μ—…μ—μ„œλŠ” λͺ‡ μ‹­κ°œ, λͺ‡ 백개의 ν•¨μˆ˜λ₯Ό μ‚¬μš©ν• μ§€ λͺ¨λ₯΄λŠ” μƒν™©μ—μ„œ μ „μ—­ λ³€μˆ˜λ₯Ό λ‚¨μš©ν•˜κ²Œ 되면, μ €λŸ° μ‹€μˆ˜λ₯Ό ν–ˆμ„ λ•Œ μ–΄λ””μ„œ 값이 μˆ˜μ •λ˜λŠ”μ§€, 였λ₯˜κ°€ μƒκ²ΌλŠ”μ§€ μ•Œ 수 μ—†κ²Œ λ©λ‹ˆλ‹€.


πŸ‘πŸ»μ’‹μ€ Scoping μŠ΅κ΄€

μ΅œλŒ€ν•œ Block Scopeμ—μ„œ μ§€μ—­λ³€μˆ˜λ₯Ό μ„ μ–Έν•΄μ•Όν•©λ‹ˆλ‹€.

지역 λ³€μˆ˜μ˜ μž₯점

  • μ½”λ“œμ˜ ν’ˆμ§ˆμ„ μ˜¬λ €μ€λ‹ˆλ‹€.
  • block으둜 κ΅¬λΆ„λ˜κΈ° λ•Œλ¬Έμ— μ½”λ“œ 가독성이 μ˜¬λΌκ°„λ‹€.
  • κΈ°λŠ₯λ³„λ‘œ block을 λ‚˜λˆ„λ©΄ μ½”λ“œλ₯Ό μ΄ν•΄ν•˜κΈ° μ‰¬μ›Œμ§„λ‹€.
  • ν”„λ‘œκ·Έλž¨μ΄ λλ‚ λ•ŒκΉŒμ§€ λ³€μˆ˜κ°€ μ‚΄μ•„μžˆλŠ” μ „μ—­λ³€μˆ˜μ™€ 달리 μ§€μ—­λ³€μˆ˜λŠ” block이 λλ‚˜λ©΄ λ³€μˆ˜μ˜ μ‚¬μš©μ΄ μ’…λ£Œλ˜μ–΄μ„œ λ©”λͺ¨λ¦¬ μ ˆμ•½μ΄ λœλ‹€.

즉, μ „μ—­ λ³€μˆ˜λ₯Ό 쓰지 μ•Šλ„λ‘ λ…Έλ ₯ν•˜κ³ , μ΅œλŒ€ν•œ Block Scopeμ—μ„œ letκ³Ό constλ₯Ό μ‚¬μš©ν•˜μ—¬ μ½”λ“œλ₯Όμž‘μ„±ν•΄μ•Όν•©λ‹ˆλ‹€.



βœπŸ»μ΅œμ’… 정리

  • scope : λ³€μˆ˜κ°€ μ–΄λ””κΉŒμ§€ 쓰일 수 μžˆλŠ”μ§€μ˜ λ²”μœ„μž…λ‹ˆλ‹€.
  • block : μ€‘κ΄„ν˜Έ{} 둜 감싸진 것을 block이라고 ν•©λ‹ˆλ‹€.
  • global scope : block 밖을 gabla scope라고 ν•©λ‹ˆλ‹€.
  • global variable : global scopeμ—μ„œ λ§Œλ“  λ³€μˆ˜λ₯Ό global variable(μ „μ—­ λ³€μˆ˜)라고 ν•©λ‹ˆλ‹€.
  • block scope : block λ‚΄λΆ€λ₯Ό λ§ν•©λ‹ˆλ‹€
  • local variable : block scopeμ—μ„œ λ§Œλ“  λ³€μˆ˜λ₯Ό local variable(지역 λ³€μˆ˜)라고 ν•©λ‹ˆλ‹€.
  • global namespace : namespaceλŠ” λ³€μˆ˜ 이름을 μ‚¬μš©ν•  수 μžˆλŠ” λ²”μœ„λ₯Ό λœ»ν•©λ‹ˆλ‹€. global namespaceλŠ” ν•΄λ‹Ή ν”„λ‘œκ·Έλž¨ μ–΄λ””μ„œλ‚˜ μ‚¬μš©ν•  수 μžˆλŠ” λ³€μˆ˜ μ΄λ¦„μž…λ‹ˆλ‹€.
  • scope pollution : global λ³€μˆ˜λ₯Ό λ‚¨μš©ν•΄μ„œ μƒκΈ°λŠ” 였λ₯˜μž…λ‹ˆλ‹€.
profile
ν”„λ‘ νŠΈμ—”λ“œ 개발자 κ°€λ³΄μžκ³ ~!!

0개의 λŒ“κΈ€