자바스크립트
[JavaScript] 변수 선언
코딩하는둥이
2025. 3. 4. 12:36
변수(Variable)
- 데이터(정보)를 담을 스 메모리 공간의 이름
변수 선언(declaration)
- 어떤 타입의 데이터를 담을 수 있는 메모리 공간을 활당해달라고 명령하는 것
변수 유효범위(scope)
: 선언된 변수가 메모리에서 삭제되지 않고 영향을 미칠 수 있는 코드 범위
ES6가 나오기 전 변수 선언
var
1) 변수 스코프는 함수 레벨이라서 함수가 끝나는 순간 변수를 사용하지 못했습니다.
function testVar() {
var message = "Hello, World!";
console.log(message); // 출력: Hello, World!
}
testVar();
console.log(message); // ReferenceError: message is not defined
2) 호이스팅(변수 선언을 중간에서 해도 코드 최상단부에서 선언된 것처럼 동작하는 현상)이 발생했습니다.
console.log(x); // 출력: undefined
var x = 5;
console.log(x); // 출력: 5
3) 불변값도 생성 불가능하고 중복 선언도 가능하여 실수로 중복 사용하여 오류가 발생하는 경우가 많았습니다.
중복 선언 오류
- 큰 문제점은 오류를 발생시키지 않고 덮기때문에 디버깅이 어렵습니다.
var count = 1;
var count = 2;
console.log(count); // 2 출력, 원래 값 덮어씀
불변성 부재 오류
- user 샛체는 불변값이 아니기 때문에 updateAge 함수가 원본 객체를 직접 수정함으로 큰 문제를 불러올 수 있습니다.
var user = { name: "John", age: 30 };
function updateAge(user) {
user.age += 1; // 원본 객체 변경
}
updateAge(user);
console.log(user.age); // 31 출력, 원본 객체가 변경됨
4) 루프 안의 선언이 밖에서도 유효해서 예상치 않은 결과를 가지고 올 수 있습니다.
function loopExample() {
for (var i = 0; i < 3; i++) {
console.log(`Inside loop: ${i}`); // 출력: Inside loop: 0, Inside loop: 1, Inside loop: 2
}
console.log(`Outside loop: ${i}`); // 출력: Outside loop: 3
}
loopExample();
5) 키워드 생략 가능해서 의도치 않은 전역변수 생성를 할 수 있습니다.
function example() {
x = 10; // var 키워드 없이 선언
}
example();
console.log(x); // 10 (전역 변수가 됨)
ES6 변수 선언
let, const
1) 변수 스코프가 블록 레벨이라서 선언된 블록 내에서만 유효하기 때문에 안전합니다.
function testVar() {
var message = "Hello, World!";
console.log(message); // 출력: Hello, World!
}
testVar();
console.log(message); // ReferenceError: message is not defined
let은 일반 변수에 사용되고 const 상수( 불변값) 선언에 사용됩니다.
아래 코드를 보면 let은 재할당이 가능한 걸 확인 할 수 있으며 새로운 값을 가집니다.
let count = 0;
console.log(count); // 출력: 0
count = count + 1;
console.log(count); // 출력: 1
let name = "Alice";
console.log(name); // 출력: Alice
name = "Bob";
console.log(name); // 출력: Bob
for (let i = 0; i < 3; i++) {
console.log(i); // 출력: 0, 1, 2
}
하지만, cosnt는 한 번 할당하면 재할당이 불가능하기 때문에 재할당할 수 없는 상수를 선언할 떄 사용합니다.
// 상수 선언
const PI = 3.14159;
console.log(PI); // 출력: 3.14159
// 재할당 시도 (주석 처리된 부분)
// PI = 3.14; // TypeError: Assignment to a constant variable
// 배열 선언
const COLORS = ["red", "green", "blue"];
COLORS.push("yellow"); // 배열 내용 변경 가능
console.log(COLORS); // 출력: ["red", "green", "blue", "yellow"]
// 객체 선언
const USER = {
name: "John",
age: 30
};
USER.age = 31; // 객체 속성 변경 가능
console.log(USER); // 출력: { name: "John", age: 31 }
let과 const를 통해 var의
중복선언
호이스팅 방지처리
키워드 생략 불가
의 문제점을 해결 했습니다.