var,let,const의 주요 차이점은 무엇인가

#resource
#javascript
작성일:2025. 4. 17.
수정일:2025. 4. 18.

var,let,const는 전부 변수 선언 키워드이지만 중요한 차이점이 있다.

주요 차이 (스코프,재선언,재할당)#

letconstvar의 단점(함수 스코프, 재선언 가능 등)을 보완하기 위해 ES6에서 도입되었다. 블록 스코프와 재선언/재할당 규칙은 코드를 더 예측 가능하고 안전하게 만들어주기 때문에, 현대 자바스크립트 개발에서는 var대신 letconst사용이 강력히 권장된다. const를 기본으로 사용하고, 재할당이 필요한 경우에만 let을 사용하는것이 좋다.

스코프(Scope)#

  • var **함수 스코프(Function Scope)**를 갖는다. 함수 내에서 선언된 var 변수는 함수 전체에서 유효하며, 함수 외부에서는 접근할 수 없다. 블록({})스코프를 가지지 않아 if 문이나 for문 블록 내에서 선언해도 해당 블록 외부에서 접근이 가능하다.

  • let,const **블록 스코프(Block Scope)**를 가진다. 변수가 선언된 블록({}),문(statement), 또는 표현식 내에서만 유효하다. 이는 변수의 유효 범위를 더 좁게 제한하여 의도치 않은 값 변경이나 충돌을 방지한다.

스코프 더 자세히 알아 보기

  • 스코프(Scope)란 무엇인가

재선언(Redeclaration)#

  • var 같은 스코프 내에서 동일한 이름으로 변수를 다시 생성해도 에러가 발생하지 않는다. 이는 실수로 변수를 덮어쓰는 문제를 일으킬 수 있다.

  • let,const 같은 스코프 내에서 동일한 이름으로 변수를 다시 선언하면 SyntaxError가 발생한다.

재할당(Reassignment)#

  • var,let 선언 후에 다른 값으로 재할당 하는 것이 가능하다.
  • const 선언시 반드시 값으로 초기화해야 하며, 한번 할당된 후에는 다른 값으로 재할당할 수 없다(상수). 단, const로 선언된 객체나 배열의 경우, 객체 자체를 재할당할 수는 없지만 그 내부의 속성이나 요소는 변경할 수 있다(객체/배열 자체가 불변이 되는것은 아님).

비교표#

기능(Feature)varletconst
스코프(Scope)함수 스코프(Function)블록 스코프(Block)블록 스코프(Block)
호이스팅(Hoisting)선언 + undefined초기화선언만(초기화X)선언만(초기화X)
재선언 (Redeclaration)가능(O)불가능(X,같은 스코프 내)불가능(X,같은 스코프 내)
재할당(Reassignment)가능(O)가능(O)불가능(X)
시간적 사각지대(TDZ)없음(X)있음(O)있음(O)
선언 전 접근 (Access before)undefinedReferenceErrorReferenceError
Info

letconst가 TDZ를 가지는 것은 선언 전에 변수를 사용하는 실수를 방지하는 데 도움을 준다. var에서 letconst로의 전환은 단순히 새로운 키워드를 사용하는 것을 넘어, 자바스크립트 언어가 더 안전하고 예측 가능한 코드를 작성하도록 발전해 왔음을 보여준다. var은 함수 레벨 스코프와 undefined로 초키화되는 호이스팅 특성 때문에, 특히 반복문이나 조건문 내에서 변수를 사용할 땡 셰아치 못한 버그를 유라하는 경우가 많았다. 예를 들어, for 루프에서 이러한 문제를 해결하기 위해 블록 스코프와 TDZ를 도입하여, 변수의 유효 범위를 명확히 하고 선언 전에 접근하는 것을 막아 코드의 안정성을 높였다.

  • 호이스팅(Hoisting)이란 무엇인가