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

_____
Q1: var, let, const는 무엇인가요?
- 모두 자바스크립트에서 변수를 선언하는 키워드입니다.

Q2: var와 let의 가장 큰 차이점은 무엇인가요?
- var는 함수 스코프(function-scoped)를 가지며, let은 블록 스코프(block-scoped)를 가집니다. 즉, let은 중괄호({}) 내부에서만 유효하지만 var는 해당 함수 전체에서 유효합니다.

Q3: const는 무엇이며 let과 어떻게 다른가요?
- const는 블록 스코프를 가지며, 선언 시 반드시 초기화해야 하고 이후 재할당이 불가능합니다. 반면 let은 재할당이 가능합니다.

Q4: var, let, const 중 어느 것을 사용하는 것이 권장되나요?
- 일반적으로 재할당이 필요 없는 변수는 const를 사용하고, 재할당이 필요할 때는 let을 사용합니다. var 사용은 스코프 혼동 문제 때문에 권장되지 않습니다.

Q5: var의 호이스팅(hoisting)은 무엇인가요?
- var로 선언한 변수는 선언이 코드 최상단으로 끌어올려지지만 초기화는 선언 위치에서 일어나므로, 선언 전에 접근하면 undefined가 나옵니다.

Q6: let과 const도 호이스팅되나요?
- 네, 호이스팅되지만 ‘일시적 사각지대(Temporal Dead Zone)’ 때문에 선언 전에 접근하면 ReferenceError가 발생합니다.

Q7: var, let, const 각각의 재선언 가능 여부는?
- var는 같은 스코프에서 재선언 및 재할당 모두 가능합니다.
- let은 같은 스코프에서 재선언 불가능하지만 재할당은 가능합니다.
- const는 같은 스코프에서 재선언 및 재할당 모두 불가능합니다.

Q8: const로 선언한 객체나 배열의 내부 값은 변경할 수 있나요?
- 네, const 변수는 재할당을 막지만 객체나 배열 내부 속성의 변경은 가능합니다. 다만 변수 자체를 다른 객체/배열로 변경할 순 없습니다.

Q9: 요약하면 var, let, const 차이점은 무엇인가요?
- var: 함수 스코프, 재선언 및 재할당 가능, 호이스팅 시 undefined
- let: 블록 스코프, 재선언 불가능, 재할당 가능, 호이스팅 시 일시적 사각지대 발생
- const: 블록 스코프, 재선언 및 재할당 불가능, 초기화 필수, 호이스팅 시 일시적 사각지대 발생

Q10: 실제 코딩 시 어떤 키워드를 주로 써야 하나요?
- 기본적으로 const를 쓰고, 값 변경이 필요하면 let으로 선언하며, var는 되도록 사용하지 않는 것이 좋습니다.
JavaScript에서 변수 선언을 위해 사용하는 `var`, `let`, `const`는 각각의 특성과 사용 용도에 따라 다릅니다.

이들 사이의 차이점을 이해하는 것은 코드의 가독성과 유지보수성을 높이는 데 중요한 요소입니다.

아래에서는 각 키워드의 특징과 차이점을 자세히 설명하겠습니다.

1. `var`- 스코프(Scope) : `var`로 선언된 변수는 함수 스코프(function scope)를 가집니다.

즉, 변수가 선언된 함수 내에서만 유효하며, 함수 외부에서는 접근할 수 없습니다.

만약 함수 외부에서 선언된다면, 전역 스코프(global scope)를 가지게 됩니다.

- 호이스팅(Hoisting) : `var`로 선언된 변수는 호이스팅이 발생합니다.

이는 변수가 선언되기 전에 사용할 수 있다는 의미입니다.

그러나 실제 값은 변수 선언문이 실행될 때까지 `undefined`로 남아 있습니다.

- 재선언 : 같은 스코프 내에서 여러 번 선언할 수 있습니다.

이는 코드의 예측 가능성을 떨어뜨릴 수 있습니다.

```javascriptconsole.log(x); // undefinedvar x = 5;console.log(x); // 5var y = 10;var y = 20; // 재선언 가능console.log(y); // 20```

2. `let`- 스코프 : `let`으로 선언된 변수는 블록 스코프(block scope)를 가집니다.

즉, `{}`로 감싸진 코드 블록 내에서만 유효합니다.

이는 `if`, `for`, `while` 등의 블록에서도 적용됩니다.

- 호이스팅 : `let`도 호이스팅이 발생하지만, `Temporal Dead Zone (TDZ)`이라는 개념이 적용됩니다.

이는 변수가 선언되기 전에는 접근할 수 없다는 의미입니다.

따라서 선언 전에 접근하려고 하면 `ReferenceError`가 발생합니다.

- 재선언 : 같은 스코프 내에서 재선언할 수 없습니다.

이는 코드의 예측 가능성을 높이는 데 기여합니다.

```javascriptconsole.log(a); // ReferenceErrorlet a = 5;console.log(a); // 5let b = 10;// let b = 20; // SyntaxError: Identifier 'b' has already been declared```

3. `const`- 스코프 : `const`도 `let`과 마찬가지로 블록 스코프를 가집니다.

`{}`로 감싸진 코드 블록 내에서만 유효합니다.

- 호이스팅 : `const`도 호이스팅이 발생하며, TDZ가 적용됩니다.

따라서 선언되기 전에 접근하면 `ReferenceError`가 발생합니다.

- 재선언 및 재할당 : `const`로 선언된 변수는 재선언할 수 없으며, 재할당도 불가능합니다.

즉, 한 번 값을 할당하면 그 값을 변경할 수 없습니다.

그러나 객체나 배열과 같은 참조 타입의 경우, 내부 속성이나 요소는 변경할 수 있습니다.

```javascriptconst c = 5;// c = 10; // TypeError: Assignment to constant variable.const obj = { key: 'value' };obj.key = 'newValue'; // 가능console.log(obj.key); // 'newValue'// const obj = {}; // SyntaxError: Identifier 'obj' has already been declared``` 요약- `var` : 함수 스코프, 호이스팅, 재선언 가능.

- `let` : 블록 스코프, 호이스팅(하지만 TDZ 적용), 재선언 불가.- `const` : 블록 스코프, 호이스팅(하지만 TDZ 적용), 재선언 및 재할당 불가. 결론일반적으로, `let`과 `const`를 사용하는 것이 권장됩니다.

`let`은 값이 변경될 가능성이 있는 변수에 사용하고, `const`는 값이 변경되지 않을 것임을 보장하는 변수에 사용합니다.

`var`는 오래된 코드에서 주로 사용되며, 새로운 코드에서는 피하는 것이 좋습니다.

이러한 규칙을 따르면 코드의 가독성과 안정성을 높일 수 있습니다.

작성자: 김하린 [비회원] | 작성일자: 1년 전 2024-09-08 14:47:22
조회수: 250 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.