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

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

[λͺ¨λ”₯λ‹€] 04μž₯ λ³€μˆ˜

728x90

(μˆ˜μ • 23.4.25)

🌈4.1 λ³€μˆ˜λž€ 무엇인가? μ™œ ν•„μš”ν•œκ°€?

 

μ—°μ‚° μ‹œ 받은 값을 μž¬μ‚¬μš©ν•˜κΈ° μœ„ν•΄ λ³€μˆ˜κ°€ ν•„μš”ν•˜λ‹€.

μ—°μ‚° ν›„μ˜ 값은 λ©”λͺ¨λ¦¬μ— μ €μž₯λ˜μ–΄ μžˆμ§€λ§Œ, JS μ—μ„œλŠ” λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό μ½”λ“œκ°€ 싀행될 λ•Œλ§ˆλ‹€ μž„μ˜λ‘œ μ •ν•œλ‹€.

그렇기에 μ½”λ“œκ°€ 싀행될 λ•Œλ§ˆλ‹€ λ©”λͺ¨λ¦¬μ˜ μ£Όμ†ŒλŠ” λ³€κ²½λœλ‹€.

 

즉, ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λŠ” κΈ°μ–΅ν•˜κ³  싢은 값을 λ©”λͺ¨λ¦¬μ— μ €μž₯ν•˜κ³ , κ·Έ μ €μž₯된 값을 μž¬μ‚¬μš©ν•˜κΈ° μœ„ν•΄ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•œλ‹€.

 

🍈 λ³€μˆ˜ : ν•˜λ‚˜μ˜ 값을 μ €μž₯ν•˜κΈ° μœ„ν•΄ ν™•λ³΄ν•œ λ©”λͺ¨λ¦¬ 곡간 ν˜Ήμ€ κ·Έ λ©”λͺ¨λ¦¬ 곡간을 μ‹λ³„ν•˜κΈ° μœ„ν•΄ 뢙인 이름

=> κ°„λ‹¨νžˆ 말해 'κ°’μ˜ μœ„μΉ˜λ₯Ό κ°€λ¦¬ν‚€λŠ” 상징적인 이름'이닀.

 

🍈 ν• λ‹Ή(λŒ€μž…, μ €μž₯) : λ³€μˆ˜μ— 값을 μ €μž₯ν•˜λŠ” 것

🍈 μ°Έμ‘°: λ³€μˆ˜μ— μ €μž₯된 값을 μ½μ–΄λ“€μ΄λŠ” 것

 

λ³€μˆ˜μ— μ €μž₯된 κ°’μ˜ 의미λ₯Ό νŒŒμ•…ν•  수 μžˆλŠ” λ³€μˆ˜ 이름은, 가독성을 λ†’μ΄λŠ” λΆ€μˆ˜μ μΈ νš¨κ³Όλ„ μžˆλ‹€. 

μ½”λ“œλŠ” μ»΄ν“¨ν„°μ—κ²Œ λ‚΄λ¦¬λŠ” λͺ…λ Ήμ΄μ§€λ§Œ, 개발자λ₯Ό μœ„ν•œ λ¬Έμ„œμ΄κΈ°λ„ ν•˜λ‹€.

 

 

 

🌈 4.2 μ‹λ³„μž

 

🍈 μ‹λ³„μž : λ³€μˆ˜ 이름. μ–΄λ–€ 값을 κ΅¬λ³„ν•΄μ„œ 식별할 수 μžˆλŠ” κ³ μœ ν•œ 이름

-> μ‹λ³„μžλŠ” 값이 μ•„λ‹ˆλΌ λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό κΈ°μ–΅ν•˜κ³  μžˆλ‹€. 

μ‹λ³„μžλΌλŠ” μš©μ–΄λŠ” λ³€μˆ˜ μ΄λ¦„μ—λ§Œ κ΅­ν•œν•΄μ„œ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€.

λ³€μˆ˜, ν•¨μˆ˜, 클래슀 λ“±μ˜ 이름은 λͺ¨λ‘ μ‹λ³„μžμž„. 

 

 

 

🌈 4.3 λ³€μˆ˜ μ„ μ–Έ

 

πŸˆλ³€μˆ˜ μ„ μ–Έ: λ³€μˆ˜λ₯Ό μƒμ„±ν•˜λŠ” 것

== 값을 μ €μž₯ν•˜κΈ° μœ„ν•œ λ©”λͺ¨λ¦¬ 곡간 확보, λ³€μˆ˜ 이름과 ν™•λ³΄λœ λ©”λͺ¨λ¦¬ κ³΅κ°„μ˜ μ£Όμ†Œλ₯Ό μ—°κ²° => 값을 μ €μž₯ν•  수 있게 μ€€λΉ„

λ³€μˆ˜ 선언에 μ˜ν•΄ ν™•λ³΄λœ λ©”λͺ¨λ¦¬ 곡간은 확보가 ν•΄μ œλ˜κΈ° μ „κΉŒμ§€λŠ” λˆ„κ΅¬λ„ ν™•λ³΄λœ λ©”λͺ¨λ¦¬ 곡간을 μ‚¬μš©ν•  수 μ—†κ²Œ 보호됨. 

 

λ³€μˆ˜ μ„ μ–Έμ‹œ var, let, const 의 ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•¨.

 

λ³€μˆ˜μ— 값을 ν• λ‹Ήν•˜μ§€ μ•ŠμœΌλ©΄, undefined λΌλŠ” 값이 μ•”λ¬΅μ μœΌλ‘œ ν• λ‹Ή & μ΄ˆκΈ°ν™”λ¨. 

 

var 의 단점

- 블둝 레벨 μŠ€μ½”ν”„ 지원 ❌ & ν•¨μˆ˜ 레벨 μŠ€μ½”ν”„λ₯Ό 지원

-> μ˜λ„μΉ˜ μ•Šκ²Œ μ „μ—­ λ³€μˆ˜κ°€ μ„ μ–Έλ˜μ–΄ μ‹¬κ°ν•œ λΆ€μž‘μš©μ΄ λ°œμƒν•¨. 

=> const 와 let 의 λ“±μž₯

(varκ°€ 사라진 건 μ•„λ‹˜)

 

λ©”λͺ¨λ¦¬μ—λŠ” μ„ μ–Έν•˜λŠ” λ™μ‹œμ— undefinedλΌλŠ” 값이 μ•”λ¬΅μ μœΌλ‘œ 할당됨. 

(JS의 λ…νŠΉν•œ νŠΉμ§•μž„)

 

var ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜λ©΄ λ³€μˆ˜ μ„ μ–Έ & μ΄ˆκΈ°ν™” 단계가 λ™μ‹œμ— 진행됨.

 

λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜λ €λ©΄ λ°˜λ“œμ‹œ 선언이 ν•„μš”ν•¨. λ³€μˆ˜ 뿐 μ•„λ‹ˆλΌ λͺ¨λ“  μ‹λ³„μž(ν•¨μˆ˜, 클래슀) 등도 ν•΄λ‹Ή

-> 선언이 μ•ˆλ˜λ©΄ ReferenceError

 

μ΄ˆκΈ°ν™” : λ³€μˆ˜κ°€ μ„ μ–Έλœ 이후 졜초둜 값을 ν• λ‹Ήν•˜λŠ” 것

 

 

 

 

🌈 4.4 λ³€μˆ˜ μ„ μ–Έμ˜ μ‹€ν–‰ μ‹œμ κ³Ό λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ…

 

λ³€μˆ˜ μ‚¬μš©μ΄ λ³€μˆ˜ μ„ μ–Έ 이전에 μžˆλ”λΌλ„ μ—λŸ¬κ°€ λ°œμƒν•˜μ§€ μ•Šκ³  undefined κ°€ λ‚˜μ˜΄. 

=> μ™œλƒλ©΄ λ³€μˆ˜ 선언이 λŸ°νƒ€μž„μ΄ μ•„λ‹ˆλΌ κ·Έ 이전 λ‹¨κ³„μ—μ„œ λ¨Όμ € μ‹€ν–‰λ˜κΈ° λ•Œλ¬Έ

(λŸ°νƒ€μž„ : μ†ŒμŠ€μ½”λ“œκ°€ ν•œ 쀄 μ”© 순차적으둜 μ‹€ν–‰λ˜λŠ” μ‹œμ )

 

JS 엔진은 λŸ°νƒ€μž„ 이전에 평가 과정을 κ±°μΉ¨. 

평가 과정에선 

- λͺ¨λ“  선언문을 μ°Ύμ•„μ„œ λ¨Όμ € μ‹€ν–‰

평가 과정이 λͺ¨λ‘ λλ‚˜λ©΄ λͺ¨λ“  μ„ μ–Έλ¬Έ μ œμ™Έν•˜κ³  ν•œ 쀄씩 순차적으둜 싀행함. 

 

=> λ³€μˆ˜ 선언이 어디에 μžˆλ“  상관없이 λ‹€λ₯Έ μ½”λ“œλ³΄λ‹€ λ¨Όμ € 싀행함. 

-> λ³€μˆ˜ μ„ μ–Έμ˜ μœ„μΉ˜μ™€ 상관없이 μ–΄λ””μ„œλ“ μ§€ λ³€μˆ˜λ₯Ό μ°Έμ‘°ν•  수 μžˆλ‹€.

μ΄λ ‡κ²Œ λ³€μˆ˜ 선언문이 μ½”λ“œμ˜ μ„ λ‘λ‘œ λŒμ–΄ μ˜¬λ €μ§„ 것 처럼 λ™μž‘ν•˜λŠ” JS 고유의 νŠΉμ§• =>

Hoisting ν˜Έμ΄μŠ€νŒ… 이라고 ν•œλ‹€.

 

 

 

 

🌈 4.5 κ°’μ˜ ν• λ‹Ή

 

λ³€μˆ˜ μ„ μ–Έκ³Ό κ°’μ˜ 할당을 ν•˜λ‚˜μ˜ 문으둜 ν‘œν˜„ν•  수 μžˆμ§€λ§Œ,

λ³€μˆ˜ μ„ μ–Έκ³Ό κ°’μ˜ ν• λ‹Ήμ˜ μ‹œμ μ€ 닀름. 2개의 문으둜 λ‚˜λˆ„μ–΄ 각각 μ‹€ν–‰ν•˜κΈ° λ•Œλ¬Έ. 

 

문제

console.log(score); //un

score = 80;

var score; //un

console.log(score); //??

 

풀이해봄. 

console.log(score); //un 2번째 μ‹€ν–‰

score = 80; //3번째 μ‹€ν–‰. 값이 듀어감

var score; //un -> 제일 λ¨Όμ € μ‹€ν–‰λ˜μ–΄ undefined ν• λ‹Ήλœ μƒνƒœ 

console.log(score); //-> 80 좜λ ₯λ˜λŠ”κ±°μž„.

 

 

 

 

🌈 4.6 κ°’μ˜ μž¬ν• λ‹Ή

 

μž¬ν• λ‹Ήν•  수 μ—†λ‹€λ©΄ μƒμˆ˜ constant - 값을 ν•œλ²ˆλ§Œ ν• λ‹Ήν•  수 μžˆλŠ” 수. 

μž¬ν• λ‹Ήμ„ ν•  λ•Œ, 같은 λ©”λͺ¨λ¦¬ κ³΅κ°„μ—μ„œ 이전 값이 μ§€μ›Œμ§€κ³  κ·Έ μžλ¦¬μ— μƒˆλ‘œμš΄ 값이 λ“€μ–΄κ°€λŠ” 것이 μ•„λ‹ˆλΌ, 

μƒˆλ‘œμš΄ λ©”λͺ¨λ¦¬ 곡간을 ν™•λ³΄ν•˜κ³  κ·Έ 곡간에 μƒˆλ‘œμš΄ 값이 μ €μž₯됨

 

아무도 μ‚¬μš©ν•˜κ³  μžˆμ§€ μ•Šμ€ κ°’ -> ν•„μš”μ—†λŠ” κ°’μž„. => 가비지 μ½œλ ‰ν„°μ— μ˜ν•΄ λ©”λͺ¨λ¦¬μ—μ„œ μžλ™ ν•΄μ œλ¨. 

단, μ–Έμ œ ν•΄μ œλ μ§€λŠ” μ˜ˆμΈ‘ν•  수 μ—†μŒ. 

 

🎡 가비지 μ½œλ ‰ν„° Garbage Collector

- μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ ν• λ‹Ήν•œ λ©”λͺ¨λ¦¬λ₯Ό 주기적으둜 검사 -> 더 이상 μ‚¬μš©λ˜μ§€ μ•ŠλŠ” λ©”λͺ¨λ¦¬λ₯Ό ν•΄μ œν•˜λŠ” κΈ°λŠ₯. 

- λ©”λͺ¨λ¦¬ λˆ„μˆ˜λ₯Ό 방지함. 

 

JSλŠ” κ°œλ°œμžκ°€ λͺ…μ‹œμ μœΌλ‘œ λ©”λͺ¨λ¦¬λ₯Ό ν• λ‹Ήν•˜κ³  ν•΄μ œν•  수 ❌. (ν—ˆμš©ν•˜μ§€ μ•ŠμŒ) => λ§€λ‹ˆμ§€λ“œ μ–Έμ–΄

(ν—ˆμš©ν•˜λŠ” 언어도 μžˆλ‹€. C 언어같은 μ–Έλ§€λ‹ˆμ§€λ“œ μ–Έμ–΄ - κ°œλ°œμžκ°€ λ©”λͺ¨λ¦¬ 관리 κ°€λŠ₯)

 

 

 

🌈 4.7 μ‹λ³„μž 넀이밍 κ·œμΉ™

 

- 특수문자λ₯Ό μ œμ™Έν•œ 문자, 숫자, _, $ 포함할 수 μžˆμ§€λ§Œ, 

- 숫자둜 μ‹œμž‘ν•˜λ©΄ μ•ˆλ¨

- μ˜ˆμ•½μ–΄βŒ

- λŒ€μ†Œλ¬Έμž ꡬ뢄함

- 주석이 ν•„μš”μ—†λ„λ‘ 가독성이 쒋은 이름을 λΆ™μ—¬μ•Όν•œλ‹€.

 

🎡 넀이밍 μ»¨λ²€μ…˜

firstName - 카멜 μΌ€μ΄μŠ€

first_name - μŠ€λ„€μ΄ν¬

FirstName - 파슀칼

strFirstName - ν—κ°€λ¦¬μ•ˆ (νƒ€μž…κ³Ό 이름을 ν•¨κ»˜ ν‘œμ‹œ)

 

 

 

728x90
λ°˜μ‘ν˜•