JavaScript

javaScript-const 키워드

용용it 2023. 3. 3. 22:33

const 키워드는 상수를 선언하기 위해 사용한다.

 

하지만 반드시 상수만을 위해 사용하지 않는다.

이는 나중에 설명하고.

 

const 키워드의 특징은 let 키워드와 대부분 동일하기 때문에 let 키워드와 다른 점을 살펴보자.


선언과 초기화

const 키워드로 선언한 변수는 반드시 선언과 동시에 초기화해야 한다.

const foo = 1;

그렇지 않으면 다음과 같이 문법 에러가 발생한다.

const foo; // SyntaxError: Missing initializer in const declaration

const 키워드로 선언한 변수는 let 키워드로 선언한 변수와 마찬가지로 블록 레벨 스코프를 가지며, 변수 호이스팅이 발생하지 않는 것처럼 동작한다.

 

{
	// 변수 호이스팅이 발생하지 않는 것처럼 동작한다.
    console.log(foo); // ReferenceError: Cannot access 'foo' before initialization
    const foo = 1;
    console.log(foo); // 1
}

// 블록 레벨 스코프를 갖는다.
console.log(foo); // ReferenceError: foo is not defined

 


재할당 금지

var 또는 let 키워드로 선언한 변수는 재할당이 자유로우나 const 키워드로 선언한 변수는 재할당이 금지된다.

const foo = 1;
foo = 2; // TypeError: Assignmemt to constant variable

 


 

상수

const 키워드로 선언한 변수에 원시 값을 할당한 경우 변수 값을 변경할 수 없다.

원시 값은 변경 불가능한 값이므로 재할당 없이 값을 변경할 수 있는 방법이 없기 때문이다.

 

이러한 특징을 이용해 const 키워드를 상수를 표현하는 데 사용하기도 한다.

 

변수의 상대 개념인 상수는 재할당이 금지된 변수를 말한다.

상수도 값을 저장하기 위한 메모리 공간이 필요하므로 변수라고 할 수 있다.

 

단 , 변수는 언제든지 재할당을 통해 변수 값을 변경할 수 있지만 상수는 재할당이 금지된다.

 

상수는 상태 유지와 가독성, 유지보수의 편의를 위해 적극적으로 사용해야 한다. 

 


const 키워드와 객체

const 키워드로 선언된 변수에 원시 값을 할당한 경우 값을 변경할 수 없다.

하지만 const 키워드로 선언된 변수에 객체를 할당한 경우 값을 변경할 수 있다.

 

변경 불가능 한 값인 원시 값은 재할당 없이 변경(교체) 할 수 있는 방법이 없지만 변경 가능한 값인 객체는 재할당 없이도 직접 변경이 가능하기 때문이다.

 

const person = {
	name: 'Lee'
};

// 객체는 변경 가능한 값이다. 따라서 재할당 없이 변경이 가능하다.
person.name = 'Kim';

console.log(person); // {name:"Kim"}

 

 

 

const 키워드는 재할당을 금지할 뿐 "불변"을 의미하지는 않는다.

 

즉, 새로운 값을 재할당하는 것은 불가능하지만 프로퍼티 동적 생성, 삭제, 프로퍼티 값의 변경을 통해 객체를 변경하는 것은 가능하다.

 

이때 객체가 변경되더라도 변수에 할당된 참조 값은 변경되지 않는다.