Variable Declarations
JavaScript에서 변수 선언(Variable Declarations)은 프로그램에서 데이터를 저장하고 참조하는 데 사용되는 중요한 개념이다. 변수 선언 방식에 따라 변수의 **유효 범위(Scope)**와 재할당 가능 여부 등이 결정된다.
ES6(ECMAScript 2015) 이전에는 var
키워드만을 사용하여 변수를 선언했으나, 이후 let
과 const
키워드가 도입되어 보다 다양한 변수 선언이 가능해졌다.
JavaScript에서는 주로 세 가지 키워드를 사용하여 변수를 선언한다:
- var 키워드 사용
- let 키워드 사용
- const 키워드 사용
Var 키워드
var는 JavaScript의 가장 오래된 변수 선언 방식이다.
- 함수 레벨 스코프(Function-level scope): 함수 내부에서 선언된 변수는 함수 내부에서만 유효하며, 함수 외부에서는 접근할 수 없다.
- 함수 내부에서 선언되면 함수 내부에서만 접근 가능
- 함수 외부에서 선언되면 전역 변수가 됨
- 중복 선언 가능: 같은 이름의 변수를 여러 번 선언해도 에러가 발생하지 않는다.
- 변수 호이스팅(Variable Hoisting): 변수 선언이 스코프의 최상단으로 끌어올려지는 특성이 있다.
예시:
위 코드에서 var
로 선언된 변수 x
는 함수 전체에서 동일한 스코프를 공유하므로, 블록 내부와 외부에서 값이 변경된다.
Let 키워드
let은 ES6에서 도입된 변수 선언 방식이다.
- 블록 레벨 스코프(Block-level scope): 모든 코드 블록(예:
{}
,if
,for
등) 내에서 선언된 변수는 해당 블록 내에서만 유효하다.- 선언된 블록 내에서만 접근 가능
- 중복 선언 불가: 같은 이름의 변수를 동일한 스코프 내에서 다시 선언하면 에러가 발생한다.
- 변수 호이스팅 발생하지만 초기화 이전에는 접근 불가:
let
으로 선언된 변수는 호이스팅되지만, 초기화되기 전까지는 접근할 수 없어ReferenceError
가 발생한다. - 선언 전에 사용하면 일시적 사각지대(Temporal Dead Zone) 오류 발생
예시:
위 코드에서 let
으로 선언된 변수 y
는 블록마다 독립적인 스코프를 가지므로, 블록 내부와 외부의 y
는 서로 다른 변수이다.
Const 키워드
const도 ES6에서 도입되었으며, 상수를 선언하는 데 사용된다.
- 블록 레벨 스코프(Block-level scope):
let
과 동일하게 블록 내에서만 유효하다. - 중복 선언 불가: 같은 이름의 변수를 다시 선언하면 에러가 발생한다.
- 선언과 동시에 초기화 필수:
const
로 선언한 변수는 선언 시 반드시 값을 할당해야 한다. - 재할당 불가: 한 번 할당된 값을 변경할 수 없다.
- 객체와 배열의 내용은 변경 가능: 객체나 배열 자체는 변경할 수 없지만, 그 내부 속성이나 요소는 변경할 수 있다.
let
과 마찬가지로 일시적 사각지대가 있음
예시:
변수 선언 방식 비교
특성 | var | let | const |
---|---|---|---|
스코프 | 함수 스코프 | 블록 스코프 | 블록 스코프 |
호이스팅 | 선언과 초기화가 호이스팅됨 | 선언만 호이스팅됨 (TDZ) | 선언만 호이스팅됨 (TDZ) |
재선언 | 가능 | 불가능 | 불가능 |
재할당 | 가능 | 가능 | 불가능 |
선언 전 사용 | undefined | ReferenceError | ReferenceError |
var
와 let
/const
의 블록 스코프 차이 비교
특성 | var | let / const |
---|---|---|
스코프 | 함수 스코프 | 블록 스코프 |
블록 내부 접근 | 가능 | 불가능 (오직 블록 내부에서만 접근 가능) |
중복 선언 | 가능 | 불가능 |
호이스팅 | 선언+초기화(undefined) | 선언만 (초기화는 선언 이후) |
TDZ 발생 | 없음 | 있음 (선언 전 접근 시 ReferenceError ) |
var
vs. let
/const
정리
var
는 블록을 무시하고 함수 전체에서 접근 가능 → 의도치 않은 변수 변경 가능성 증가.let
과const
는 블록 단위로 변수를 제한 → 코드의 안정성을 높이고 예측 가능한 동작 보장.const
는 재할당이 불가능하여, 변경할 필요 없는 값에 사용.
변수 선언의 모범 사례
- 기본적으로
const
사용: 변수의 값이 변경되지 않을 경우 (대부분의 경우)const
를 사용한다. - 필요한 경우에만
let
사용: 변수의 값이 나중에 변경되어야 할 경우에만let
을 사용한다. var
사용 지양: 최신 JavaScript에서는var
대신let
과const
를 사용하는 것이 권장된다.- 의미 있는 이름 사용: 변수 이름은 그 용도를 명확히 나타내야 한다.
- 변수는 사용 직전에 선언: 변수를 사용하기 직전에 선언하여 가독성을 높인다.
|
|
변수 선언 시 고려사항
- 스코프: var는 함수 스코프, let과 const는 블록 스코프를 가진다.
- 호이스팅: var는 선언과 초기화가 호이스팅되지만, let과 const는 선언만 호이스팅된다.
- 재할당: var와 let은 재할당이 가능하지만, const는 불가능하다.
- 중복 선언: var만 중복 선언이 가능하다.
최신 JavaScript에서의 권장사항
- 기본적으로 const를 사용하여 변수를 선언한다.
- 재할당이 필요한 경우에만 let을 사용한다.
- var의 사용은 가급적 피하고, 레거시 코드를 다룰 때만 사용한다.
실제 사용 예제와 모범 사례
스코프 차이 이해하기
|
|
루프에서의 변수 선언
var
를 사용할 때 발생할 수 있는 문제와 let
을 사용했을 때의 차이:
|
|
상수와 객체 사용
const
로 선언한 객체의 내부 속성 변경:
|
|