Responsive Advertisement

JavaScript let ํ‚ค์›Œ๋“œ ์ดํ•ดํ•˜๊ธฐ

JavaScript์—์„œ let ํ‚ค์›Œ๋“œ๋Š” ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์ค‘์š”ํ•œ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ES6(ECMAScript 2015)์—์„œ ๋„์ž…๋œ let์€ ๊ธฐ์กด์˜ var ํ‚ค์›Œ๋“œ๋ณด๋‹ค ๋” ์œ ์—ฐํ•˜๊ณ  ์•ˆ์ „ํ•œ ๋ณ€์ˆ˜ ์„ ์–ธ ๋ฐฉ์‹์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” let์˜ ํŠน์ง•๊ณผ ์‚ฌ์šฉ๋ฒ•์„ ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

let ํ‚ค์›Œ๋“œ๋ž€?

let์€ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํ‚ค์›Œ๋“œ๋กœ, ๋ธ”๋ก ์Šค์ฝ”ํ”„๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ์ด๋Š” ๋ณ€์ˆ˜๊ฐ€ ์„ ์–ธ๋œ ๋ธ”๋ก ๋‚ด์—์„œ๋งŒ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๋ธ”๋ก์„ ๋ฒ—์–ด๋‚˜๋ฉด ๊ทธ ๋ณ€์ˆ˜๋Š” ์ ‘๊ทผํ•  ์ˆ˜ ์—†๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. let์„ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์ด ๋†’์•„์ง€๊ณ , ๋ณ€์ˆ˜์˜ ์˜ค์šฉ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

let์˜ ์ฃผ์š” ํŠน์ง•

  • ๋ธ”๋ก ์Šค์ฝ”ํ”„(Block Scope): let์œผ๋กœ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š” ํ•ด๋‹น ๋ธ”๋ก ๋‚ด์—์„œ๋งŒ ์œ ํšจํ•ฉ๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด let์€ var๋ณด๋‹ค ๋” ์—„๊ฒฉํ•œ ์Šค์ฝ”ํ”„ ๊ทœ์น™์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ์žฌ์„ ์–ธ ๋ถˆ๊ฐ€: let์œผ๋กœ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š” ๋™์ผํ•œ ์Šค์ฝ”ํ”„ ๋‚ด์—์„œ ๋‹ค์‹œ ์„ ์–ธํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์‹ค์ˆ˜๋กœ ๋ณ€์ˆ˜๋ฅผ ์ค‘๋ณต ์„ ์–ธํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.
  • ์žฌํ• ๋‹น ๊ฐ€๋Šฅ: let์œผ๋กœ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š” ๋‚˜์ค‘์— ๋‹ค๋ฅธ ๊ฐ’์œผ๋กœ ์žฌํ• ๋‹น์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ๋ณ€์ˆ˜ ํ˜ธ์ด์ŠคํŒ…(Variable Hoisting): let์œผ๋กœ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š” ์„ ์–ธ ์ „์— ์ ‘๊ทผํ•˜๋ ค๊ณ  ํ•˜๋ฉด ReferenceError๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” var์™€๋Š” ๋‹ค๋ฅธ ์ ์œผ๋กœ, let์˜ ๋ณ€์ˆ˜ ํ˜ธ์ด์ŠคํŒ…์ด var๋ณด๋‹ค ๋” ์—„๊ฒฉํ•˜๊ฒŒ ๋™์ž‘ํ•จ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

let ์‚ฌ์šฉ ์˜ˆ์ œ

๋ธ”๋ก ์Šค์ฝ”ํ”„

let์˜ ๊ฐ€์žฅ ํฐ ํŠน์ง• ์ค‘ ํ•˜๋‚˜๋Š” ๋ธ”๋ก ์Šค์ฝ”ํ”„์ž…๋‹ˆ๋‹ค. ์•„๋ž˜ ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด let์˜ ๋ธ”๋ก ์Šค์ฝ”ํ”„๋ฅผ ํ™•์ธํ•ด๋ณด์„ธ์š”.

function example() {
    let x = 10;
    if (true) {
        let x = 20;
        console.log(x); // 20
    }
    console.log(x); // 10
}
example();

์œ„ ์˜ˆ์ œ์—์„œ x ๋ณ€์ˆ˜๋Š” ๋‘ ๋ฒˆ ์„ ์–ธ๋˜์—ˆ์ง€๋งŒ, ๊ฐ๊ธฐ ๋‹ค๋ฅธ ์Šค์ฝ”ํ”„์—์„œ ์„ ์–ธ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋กœ ๋‹ค๋ฅธ ๊ฐ’์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค. let์„ ์‚ฌ์šฉํ•˜๋ฉด ์ด์ฒ˜๋Ÿผ ๋ธ”๋ก ์Šค์ฝ”ํ”„๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์žฌ์„ ์–ธ ๋ถˆ๊ฐ€

๋™์ผํ•œ ์Šค์ฝ”ํ”„ ๋‚ด์—์„œ let์œผ๋กœ ๋ณ€์ˆ˜๋ฅผ ๋‹ค์‹œ ์„ ์–ธํ•˜๋ ค๊ณ  ํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

let y = 5;
// let y = 10; // SyntaxError: Identifier 'y' has already been declared
y = 10; // ์žฌํ• ๋‹น์€ ๊ฐ€๋Šฅ
console.log(y); // 10

์œ„ ์ฝ”๋“œ์—์„œ y ๋ณ€์ˆ˜๋ฅผ ๋‹ค์‹œ ์„ ์–ธํ•˜๋ ค๊ณ  ํ•˜๋ฉด SyntaxError๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์žฌํ• ๋‹น์€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋ณ€์ˆ˜ ํ˜ธ์ด์ŠคํŒ…

let์€ ๋ณ€์ˆ˜ ํ˜ธ์ด์ŠคํŒ… ์‹œ ์„ ์–ธ ์ „์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

console.log(z); // ReferenceError: Cannot access 'z' before initialization
let z = 15;

์œ„ ์ฝ”๋“œ์—์„œ z ๋ณ€์ˆ˜๋Š” let์œผ๋กœ ์„ ์–ธ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์—, ์„ ์–ธ ์ „์— ์ ‘๊ทผํ•˜๋ ค๊ณ  ํ•˜๋ฉด ReferenceError๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๊ฒฐ๋ก 

let ํ‚ค์›Œ๋“œ๋Š” JavaScript์—์„œ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋Š” ๋ฐ ์žˆ์–ด var๋ณด๋‹ค ๋” ์•ˆ์ „ํ•˜๊ณ  ๊ฐ•๋ ฅํ•œ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋ธ”๋ก ์Šค์ฝ”ํ”„์™€ ์žฌ์„ ์–ธ ๋ถˆ๊ฐ€ ๋“ฑ์˜ ํŠน์ง•์„ ์ž˜ ์ดํ•ดํ•˜๊ณ  ํ™œ์šฉํ•˜๋ฉด, ๋”์šฑ ์•ˆ์ •์ ์ด๊ณ  ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์‰ฌ์šด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. JavaScript๋ฅผ ์ž‘์„ฑํ•  ๋•Œ let์„ ์ ๊ทน์ ์œผ๋กœ ์‚ฌ์šฉํ•ด ๋ณด์„ธ์š”!

๋Œ“๊ธ€ ์“ฐ๊ธฐ