🧑 JavaScript

[JS] var, let, const 차이

Genie_. 2024. 12. 4. 23:55
728x90
λ°˜μ‘ν˜•

🧑 JavaScript

1. var, let, constλž€?

JavaScriptμ—μ„œ λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜λŠ” λ°©λ²•μ—λŠ” var, let, const μ„Έ κ°€μ§€κ°€ μžˆλ‹€.

각각의 νŠΉμ§•κ³Ό λ™μž‘ 방식이 λ‹€λ₯΄λ―€λ‘œ μ˜¬λ°”λ₯΄κ²Œ μ‚¬μš©ν•˜λŠ” 것이 μ€‘μš”ν•˜λ‹€.


2. var의 νŠΉμ§•

varλŠ” ES6 이전뢀터 μ‘΄μž¬ν–ˆλ˜ λ³€μˆ˜ μ„ μ–Έ 방식이닀.


μ£Όμš” νŠΉμ§•

  • ν•¨μˆ˜ 레벨 μŠ€μ½”ν”„(Function Scope): var둜 μ„ μ–Έλœ λ³€μˆ˜λŠ” ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œλ§Œ μœ νš¨ν•˜λ‹€.
  • λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ…(Variable Hoisting): λ³€μˆ˜ 선언이 μ½”λ“œ μ‹€ν–‰ 전에 λŒμ–΄μ˜¬λ €μ§€μ§€λ§Œ, 값은 ν• λ‹Ήλ˜μ§€ μ•ŠμŒ (undefined μƒνƒœ).
  • 쀑볡 μ„ μ–Έ κ°€λŠ₯: 같은 μ΄λ¦„μœΌλ‘œ μ—¬λŸ¬ 번 선언해도 μ—λŸ¬κ°€ λ°œμƒν•˜μ§€ μ•ŠμŒ.

예제

console.log(a); // undefined λ°œμƒ
var a = 10;
console.log(a); // 10

if (true) {
    var b = 20;
}
console.log(b); // 20 (블둝을 λ²—μ–΄λ‚˜λ„ μ ‘κ·Ό κ°€λŠ₯)

μœ„ μ½”λ“œμ—μ„œ var λ³€μˆ˜λŠ” 블둝 μŠ€μ½”ν”„κ°€ μ•„λ‹Œ ν•¨μˆ˜ μŠ€μ½”ν”„λ₯Ό κ°€μ§€λ―€λ‘œ ifλ¬Έ λ°–μ—μ„œλ„ bλ₯Ό μ ‘κ·Όν•  수 μžˆλ‹€.


3. let의 νŠΉμ§•

let은 ES6μ—μ„œ λ„μž…λœ λ³€μˆ˜ μ„ μ–Έ λ°©μ‹μœΌλ‘œ, var의 단점을 λ³΄μ™„ν•œλ‹€.


μ£Όμš” νŠΉμ§•

  • 블둝 레벨 μŠ€μ½”ν”„(Block Scope): {} 블둝 λ‚΄λΆ€μ—μ„œλ§Œ μœ νš¨ν•˜λ‹€.
  • λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ… λ°œμƒ: ν•˜μ§€λ§Œ TDZ(Temporal Dead Zone)에 μ˜ν•΄ μ΄ˆκΈ°ν™” μ „ μ ‘κ·Ό λΆˆκ°€.
  • 쀑볡 μ„ μ–Έ λΆˆκ°€λŠ₯: 같은 μŠ€μ½”ν”„ λ‚΄μ—μ„œ 같은 λ³€μˆ˜ μ΄λ¦„μœΌλ‘œ λ‹€μ‹œ μ„ μ–Έν•˜λ©΄ μ—λŸ¬ λ°œμƒ.

예제

let x = 10;
console.log(x); // 10

if (true) {
    let y = 20;
    console.log(y); // 20
}
// console.log(y); : μ—λŸ¬λ°œμƒ

4. const의 νŠΉμ§•

constλŠ” letκ³Ό λŒ€λΆ€λΆ„ μœ μ‚¬ν•˜μ§€λ§Œ, 값을 μž¬ν• λ‹Ήν•  수 μ—†λ‹€λŠ” 차이점이 μžˆλ‹€.


μ£Όμš” νŠΉμ§•

  • 블둝 레벨 μŠ€μ½”ν”„(Block Scope): {} 블둝 λ‚΄λΆ€μ—μ„œλ§Œ μœ νš¨ν•˜λ‹€.
  • λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ… λ°œμƒ: ν•˜μ§€λ§Œ TDZ에 μ˜ν•΄ μ΄ˆκΈ°ν™” μ „ μ ‘κ·Ό λΆˆκ°€.
  • μƒμˆ˜(constant) μ„ μ–Έ: μ„ μ–Έ ν›„ 값을 λ³€κ²½ν•  수 μ—†μŒ.
  • 객체와 λ°°μ—΄μ˜ λ³€κ²½ κ°€λŠ₯: 단, 객체의 μ†μ„±μ΄λ‚˜ λ°°μ—΄ μš”μ†Œ 변경은 κ°€λŠ₯ν•˜λ‹€.

예제

const PI = 3.14;
// PI = 3.1415;

const arr = [1, 2, 3];
arr.push(4);
console.log(arr); // [1, 2, 3, 4] (λ°°μ—΄ μš”μ†Œ μΆ”κ°€ κ°€λŠ₯)

const obj = { name: 'Alice' };
obj.age = 25;
console.log(obj); // { name: 'Alice', age: 25 } (객체 속성 μΆ”κ°€ κ°€λŠ₯)

5. μ–΄λ–€ κ²½μš°μ— μ‚¬μš©ν•΄μ•Ό ν• κΉŒ?

  • λ³€ν•˜μ§€ μ•ŠλŠ” 값은 constλ₯Ό μ‚¬μš©ν•˜μž (예: μƒμˆ˜ κ°’, 객체 μ°Έμ‘° κ³ μ • λ“±).
  • 값이 λ³€ν•  κ°€λŠ₯성이 μžˆλŠ” 경우 let을 μ‚¬μš©ν•˜μž.
  • varλŠ” μ‚¬μš©μ„ μ§€μ–‘ν•˜μž. letκ³Ό constκ°€ μ œκ³΅ν•˜λŠ” 블둝 μŠ€μ½”ν”„μ™€ TDZ둜 인해 μ½”λ“œμ˜ μ•ˆμ •μ„±μ΄ λ†’μ•„μ§„λ‹€
728x90
λ°˜μ‘ν˜•