2025-01-26T02:15:33

This commit is contained in:
2025-01-26 02:15:33 +09:00
parent f43f6328c0
commit f867e689aa
22 changed files with 2702 additions and 213 deletions

View File

@@ -0,0 +1,96 @@
# 자바스크립트의 변수와 상수
자바스크립트에서 **변수(variable)**와 **상수(constant)**는 데이터를 저장하고 다루는 핵심 개념입니다. 이 둘을 제대로 이해하는 것은 자바스크립트 프로그래밍의 기초를 닦는 데 필수적입니다.
## 변수
변수는 데이터를 저장할 수 있는 이름 붙은 컨테이너입니다. 이를 통해 프로그래머는 프로그램 실행 중 데이터를 동적으로 변경하거나 활용할 수 있습니다.
자바스크립트에서는 변수를 선언하기 위해 `var`, `let`, `const` 키워드를 사용합니다.
* const: 값을 변경할 필요가 없는 경우, 예를 들어 상수나 불변 데이터를 선언할 때 사용합니다.
* let: 값이 변할 가능성이 있는 변수에 사용합니다.
* var: 가능한 사용을 피합니다. (호이스팅과 함수 스코프 문제가 디버깅을 어렵게 만듭니다.)
```javascript
// 상수를 사용해 변하지 않는 값을 저장
const PI = 3.14159;
// 변수를 사용해 변하는 값 저장
let radius = 5;
// 원의 면적 계산
let area = PI * radius * radius;
console.log(`원의 면적은 ${area}입니다.`);
// 반지름을 변경
radius = 7;
area = PI * radius * radius;
console.log(`반지름이 바뀐 후 면적은 ${area}입니다.`);
```
## var
var는 ES6 이전부터 사용되던 변수 선언 키워드입니다.
* 함수 스코프를 가집니다. 즉, 변수는 함수 내부에서만 유효하며 블록({})을 무시합니다.
* 선언 전에 사용할 수 있지만, 이는 **호이스팅(hoisting)**에 의해 `undefined`로 초기화됩니다.
```javascript
console.log(x); // undefined
var x = 10;
console.log(x); // 10
```
## let
let은 ES6에서 도입된 변수 선언 방식으로, 기존 `var`의 단점을 보완했습니다.
* 블록 스코프를 가집니다. 변수는 선언된 블록({}) 내에서만 유효합니다.
* 같은 스코프 내에서 동일한 이름의 변수를 중복 선언할 수 없습니다.
* 선언 전에 접근하려 하면 **참조 에러(ReferenceError)**가 발생합니다.
```javascript
{
let y = 20;
console.log(y); // 20
}
// console.log(y); // ReferenceError
```
## const
const는 **상수(constant)**를 선언할 때 사용합니다.
* 선언 이후 값을 변경할 수 없습니다. 하지만 객체나 배열은 내부 데이터를 수정할 수 있습니다.
* 블록 스코프를 가집니다.
* 선언과 동시에 초기화를 해야 합니다.
```javascript
const z = 30;
console.log(z); // 30
// z = 40; // TypeError: Assignment to constant variable
const obj = { a: 1 };
obj.a = 2; // 객체의 속성은 변경 가능
console.log(obj); // { a: 2 }
```
## 호이스팅(Hoisting)
* var로 선언된 변수는 선언이 코드의 최상단으로 끌어올려진 것처럼 동작합니다.
* let과 const는 호이스팅되지만, 초기화가 되지 않아 선언 전에 접근 시 에러가 발생합니다.
```javascript
console.log(a); // undefined
var a = 10;
console.log(b); // ReferenceError
let b = 20;
```
## 중복 선언 금지
let과 const는 동일한 스코프 내에서 동일한 이름의 변수를 선언할 수 없습니다.
```javascript
let x = 1;
let x = 2; // SyntaxError
```
## 선언과 초기화의 타이밍
* const는 선언과 동시에 초기화가 필요합니다.
* let은 선언 후 초기화가 가능합니다.