let 키워드에 대한 좀 더 자세한 설명

JavaScript에서 let은 변수 선언을 위해 사용되며, 여러 특징을 가지고 있습니다. 그 중에서도 블록 스코프와 재선언 불가능, 재할당 가능이 핵심적인 특성입니다.

블록 스코프(Block Scope)

let으로 선언된 변수는 블록 스코프를 가집니다. 블록 스코프란 변수가 선언된 {} 내부에서만 접근이 가능하다는 것을 의미합니다. 이는 함수, 조건문, 반복문 등 코드 블록 내에서 선언된 let 변수가 그 블록 외부에서는 접근할 수 없다는 것을 의미합니다.

 

예시:

if (true) {
    let blockScopedVariable = 'I am inside a block';
    console.log(blockScopedVariable); // 'I am inside a block'
}
console.log(blockScopedVariable); // ReferenceError: blockScopedVariable is not defined

 

위 예시에서 blockScopedVariable은 if 문의 블록 내에서 선언되고 접근되었습니다. if 문 블록 외부에서 blockScopedVariable에 접근하려고 하면 오류가 발생합니다.

재선언 불가능

let으로 선언된 변수는 같은 스코프 내에서 다시 선언될 수 없습니다. 이는 코드 내에서 실수로 같은 이름의 변수를 두 번 선언하는 것을 방지하여, 변수 사용에서의 혼란과 버그를 줄이는 데 도움을 줍니다.

 

예시:

let greeting = 'Hello';
let greeting = 'World'; // SyntaxError: Identifier 'greeting' has already been declared

 

첫 번째 greeting 선언 이후 같은 스코프 내에서 greeting을 다시 선언하려 하면 JavaScript 엔진은 오류를 발생시킵니다.

재할당 가능

let으로 선언된 변수에는 새로운 값을 할당할 수 있습니다. 이는 변수의 값을 업데이트하거나 변경해야 할 경우 유용합니다.

 

예시:

let age = 25;
age = 26; // 이제 age는 26입니다.

 

위 예시에서 age 변수는 처음에 25로 선언되었지만, 이후 26으로 값이 업데이트됩니다. 이는 변수 재할당이 가능함을 보여줍니다.

let 키워드의 이러한 특성들은 코드를 더 안전하고, 이해하기 쉽게 만들어 줍니다. 또한, 이는 변수의 스코프를 더 잘 제어할 수 있게 해주어, 큰 프로그램을 개발할 때 매우 유용합니다.

 

그럼 var는 let과 다르게 스코프 안에서 선언돼도 스코프 밖을 벗어나도 사용 가능한가?

네, 맞습니다. var 키워드로 선언된 변수는 함수 스코프(function scope)를 가집니다. 이는 var로 선언된 변수가 자신이 선언된 함수의 전체에서 접근 가능하다는 것을 의미합니다. 하지만 블록 레벨 스코프(예: if 문, for 문 내에서 선언된 스코프)는 var에 적용되지 않습니다. 따라서 var로 선언된 변수는 블록 내에서 선언되어도 해당 블록을 벗어나서도 접근할 수 있습니다.

예시 1: 함수 스코프

function exampleFunction() {
    var functionScoped = "I am accessible throughout this function";
    if (true) {
        var stillFunctionScoped = "I am also accessible throughout this function";
    }
    console.log(functionScoped);       // 출력: I am accessible throughout this function
    console.log(stillFunctionScoped);  // 출력: I am also accessible throughout this function
}

exampleFunction();
console.log(functionScoped);  // 오류: functionScoped is not defined

 

이 예에서 functionScoped와 stillFunctionScoped 변수는 함수 내부에서 선언되었기 때문에 함수의 어디에서나 접근할 수 있습니다. 하지만 함수 외부에서는 접근할 수 없습니다.

예시 2: 블록 스코프 미적용

if (true) {
    var blockScoped = "I can be accessed outside this block";
}
console.log(blockScoped);  // 출력: I can be accessed outside this block

 

위 예시에서 blockScoped는 if 블록 내에서 var로 선언되었습니다. 하지만 if 블록이 끝난 후에도 blockScoped에 접근할 수 있는 것을 볼 수 있습니다. 이는 var가 블록 스코프를 따르지 않기 때문입니다.

이러한 특성 때문에 var는 예상치 못한 버그를 유발할 수 있으며, 현대 JavaScript에서는 대부분 let 또는 const를 사용하는 것이 권장됩니다. 이들은 블록 스코프를 따르기 때문에 코드를 더 예측 가능하고 관리하기 쉽게 만듭니다.

+ Recent posts