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
์ ์ ๊ทน์ ์ผ๋ก ์ฌ์ฉํด ๋ณด์ธ์!
๋๊ธ ์ฐ๊ธฐ