λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
μ‹œλ„/Code-States

[D+09] Java Script κ°œλ…

by πŸ‡λ°•λ΄‰λ΄‰πŸ‡ 2020. 9. 15.

 

 

D+09

-  Java Script κ°œλ…κ³Ό 개발자 도ꡬ μ‚¬μš© μ€€λΉ„ -

(Scope, Closure, 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°)

 


 

 

Scope

•λ³€μˆ˜μ— μ ‘κ·Όν•  수 μžˆλŠ” 유효 λ²”μœ„λ‘œ μ–΄λ””μ„œλΆ€ν„° μ–΄λ””κΉŒμ§€ μœ νš¨ν•œ 지λ₯Ό νŒλ‹¨ν•˜λŠ” λ²”μœ„λΌ λ³Ό 수 μžˆλ‹€.

 

 

Global Scope 와 Local Scope

•Global Scope

  전역에 μ„ μ–Έλ˜μ–΄ 있기 λ•Œλ¬Έμ— μ–΄λŠ 곳이든 ν•΄λ‹Ή λ³€μˆ˜μ— 접근이 κ°€λŠ₯ν•˜λ‹€.

 

• Local Scope

  ν•΄λ‹Ή μ§€μ—­μ—μ„œλ§Œ 접근이 κ°€λŠ₯ν•˜λ―€λ‘œ ν•΄λ‹Ή 지역 밖을 λ²—μ–΄λ‚  수 μ—†λ‹€.

  지역 λ³€μˆ˜λŠ” ν•¨μˆ˜ λ‚΄μ—μ„œ μ „μ—­ λ³€μˆ˜λ³΄λ‹€ 더 높은 μš°μ„ μˆœμœ„λ₯Ό 가진닀.

 

 

Function Scope 와 Block Scope

•Function Scope

  ν•¨μˆ˜μ½”λ“œμ˜ 블둝 λ‚΄μ—μ„œ μ„ μ–Έλœ λ³€μˆ˜λŠ” ν•΄λ‹Ή ν•¨μˆ˜ μ½”λ“œ 블둝 μ½”λ“œμ—μ„œλ§Œ μœ νš¨ν•˜κ³  μ™ΈλΆ€μ—μ„œλŠ” μœ νš¨ν•˜μ§€ μ•Šλ‹€.

 

• Block Scope

  μ€‘κ΄„ν˜Έλ‘œ κ΅¬λΆ„λ˜λŠ” 블둝 λ²”μœ„

 

 

Scope νŠΉμ§•

• μ§€μ—­ μŠ€μ½”ν”„μ—μ„œ λ°”κΉ₯ λ³€μˆ˜μ™€ ν•¨μˆ˜λ₯Ό μ ‘κ·Όν•˜λŠ” 것이 κ°€λŠ₯ν•˜μ§€λ§Œ λ°”κΉ₯μͺ½μ—μ„œ μ•ˆμͺ½ λ³€μˆ˜ ν•¨μˆ˜λ₯Ό μ ‘κ·Όν•˜λŠ” 것은 λΆˆκ°€λŠ₯ν•˜λ‹€.

 

• ν•¨μˆ˜κ°€ μ„ μ–Έλ˜λŠ” λ™μ‹œμ— μžμ‹ λ§Œμ˜ μŠ€μ½”ν”„λ₯Ό κ°€μ§€κ²Œ λœλ‹€.

 

• ν•¨μˆ˜μ•ˆμ— ν•¨μˆ˜λ₯Ό 집어넣을 수 있기 λ•Œλ¬Έμ— 쀑첩이 κ°€λŠ₯ν•˜λ‹€.

 

 

let / const / var

  let const var
μœ νš¨λ²”μœ„ Block Scope Block Scope Function Scope
κ°’ μž¬μ •μ˜ κ°€λŠ₯  λΆˆκ°€λŠ₯ κ°€λŠ₯
μž¬μ„ μ–Έ λΆˆκ°€λŠ₯ λΆˆκ°€λŠ₯ κ°€λŠ₯ (단, μ—λŸ¬λ°œμƒ κ°€λŠ₯μ„±)

 

 

μ „μ—­λ²”μœ„λ₯Ό λŒ€ν‘œν•˜λŠ” 객체 Window

• κΈ€λ‘œλ²Œ μŠ€μ½”ν”„μ—μ„œ μ„ μ–Έλœ ν•¨μˆ˜μ™€ varν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•΄ μ„ μ–Έλœ λ³€μˆ˜λŠ” window 객체와 연결이 λœλ‹€.

 

• 객체 μ„ μ–ΈμœΌλ‘œ μ€‘λ³΅λœ μ •λ³΄λ“€λ‘œ 좔후에 μž‘μ—… μ‹œ 좩돌둜 인해 μ›ν•˜λŠ” λ°©ν–₯으둜 λ‚˜μ˜€μ§€ μ•Šμ„ 수 μžˆμœΌλ‹ˆ 가급적 μ „μ—­ λ²”μœ„μ— λ„ˆλ¬΄ λ§Žμ€ 선언을 ν•˜μ§€ μ•Šλ„λ‘ ν•΄μ•Ό ν•œλ‹€.

 

 

μ„ μ–Έ 없이 μ΄ˆκΈ°ν™”λœ μ „μ—­ λ³€μˆ˜?

μ„ μ–Έ ν‚€μ›Œλ“œ (let, const, var) 없이 λ³€μˆ˜λ₯Ό 가급적 μ΄ˆκΈ°ν™”ν•˜μ§€ μ•Šλ„λ‘ ν•œλ‹€.

 

μ™œλƒν•˜λ©΄ 이럴 경우 λ³€μˆ˜κ°€ μ „μ—­ λ³€μˆ˜λ‘œ μ·¨κΈ‰λ˜μ–΄ 버리기 λ•Œλ¬Έμ— λ§ˆμ°¬κ°€μ§€λ‘œ 좔후에 μ—λŸ¬κ°€ λ°œμƒν•  수 μžˆλ‹€.

 

이λ₯Ό μ˜ˆλ°©ν•˜κΈ° μœ„ν•΄ λ¬Έμžμ—΄λ‘œ 'use strict'을 μž…λ ₯ν•΄ μ£Όλ©΄ 슀트릭트 λͺ¨λ“œλ₯Ό μ‚¬μš©ν•˜κ²Œ 되며 

λ³€μˆ˜λ₯Ό ν‚€μ›Œλ“œ μ„ μ–Έ 없이 μ΄ˆκΈ°ν™”ν•œ λ‚΄μš©μ΄ μžˆμ„ μ‹œμ— μ—λŸ¬λ₯Ό λ°œμƒμ‹œμΌœ μ€€λ‹€.

 

 


Closure

• μ™ΈλΆ€ ν•¨μˆ˜μ˜ λ³€μˆ˜μ— μ ‘κ·Όν•  수 μžˆλŠ” λ‚΄λΆ€ ν•¨μˆ˜

 

컀링

•ν•¨μˆ˜ ν•˜λ‚˜κ°€ n개의 인자λ₯Ό λ°›λŠ” λŒ€μ‹ μ— n개의 ν•¨μˆ˜λ₯Ό λ§Œλ“€μ–΄ 각각 인자λ₯Ό λ°›κ²Œ ν•˜λŠ” λ°©λ²•μœΌλ‘œ μ™ΈλΆ€ ν•¨μˆ˜μ˜ λ³€μˆ˜κ°€ μ €μž₯λ˜μ–΄ 마치 ν…œν”Œλ¦Ώ ν•¨μˆ˜μ™€ 같이 μ‚¬μš© κ°€λŠ₯ν•˜λ‹€.

 

ν΄λ‘œμ € λͺ¨λ“ˆ νŒ¨ν„΄

•λ³€μˆ˜λ₯Ό μŠ€μ½”ν”„ μ•ˆμͺ½μ— 가두어 ν•¨μˆ˜ λ°–μœΌλ‘œ λ…ΈμΆœμ‹œν‚€μ§€ μ•ŠλŠ” 방법

 

 


객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°

• ν•˜λ‚˜μ˜ λͺ¨λΈμ΄ λ˜λŠ” 청사진(blueprint)을 λ§Œλ“€κ³  , κ·Έ 청사진을 λ°”νƒ•μœΌλ‘œ ν•œ 객체(object)λ₯Ό λ§Œλ“œλŠ” ν”„λ‘œκ·Έλž˜λ° νŒ¨ν„΄

 

• μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ 청사진(blueprint)은 클래슀(Class)라 ν•˜κ³ , 객체(object)λ₯Ό μΈμŠ€ν„΄μŠ€(instance)라고 ν•œλ‹€.

 

 

클래슀 μ„ μ–Έ

•ν•¨μˆ˜ ν•˜λ‚˜κ°€ n개의 인자λ₯Ό λ°›λŠ” λŒ€μ‹ μ— n개의 ν•¨μˆ˜λ₯Ό λ§Œλ“€μ–΄ 각각 인자λ₯Ό λ°›κ²Œ ν•˜λŠ” λ°©λ²•μœΌλ‘œ μ™ΈλΆ€ ν•¨μˆ˜μ˜ λ³€μˆ˜κ°€ μ €μž₯λ˜μ–΄ 마치 ν…œν”Œλ¦Ώ ν•¨μˆ˜μ™€ 같이 μ‚¬μš© κ°€λŠ₯ν•˜λ‹€.

 

 

μΈμŠ€ν„΄μŠ€ λ§Œλ“€κΈ°

• new ν‚€μ›Œλ“œλ₯Ό 톡해 클래슀의 μΈμŠ€ν„΄μŠ€λ₯Ό λ§Œλ“€μ–΄ λ‚Ό 수 μžˆλ‹€.

 

• 각각의 μΈμŠ€ν„΄μŠ€λŠ” 클래슀의 κ³ μœ ν•œ 속성과 λ©”μ„œλ“œλ₯Ό 가진닀.

 

 

속성과 λ©”μ†Œλ“œ

• 속성 : μ œν’ˆμœΌλ‘œ λ”°μ§€μžλ©΄ 속성은 μ œν’ˆμ˜ λΈŒλžœλ“œ, 이름, 가격 λ“± μ œν’ˆμ΄ μ§€λ‹Œ νŠΉμ§•κ³Ό 같은 것이닀.

 

• λ©”μ†Œλ“œ : μ œν’ˆμœΌλ‘œ λ”°μ§€μžλ©΄ 클래슀λ₯Ό 톡해 ν•˜κ³ μž ν•˜λŠ” μ•‘μ…˜μ΄λ‹€.

 

 

클래슀 속성 μ •μ˜

 

 

 

λ°˜μ‘ν˜•

λŒ“κΈ€