안녕하세요.
제가 예전에 한 회사 면접을 볼 때 "const로도 값을 변경할 수 있는데 어떤 경우인지 아십니까?"라는 질문을 받았었는데요, 메모리 구조에 대한 지식이 부족했어서 힙? 스택? 어쩌고저쩌고.. 어버버 거렸던 기억이 문뜩 납니다..
(아시는 것 같은데 왜 대답을 못 하시죠? 더 생각하고 대답해보세요! 라고 하셨는데 저는 정말 몰랐다구요ㅠㅠㅜㅜㅜ...)
무튼..! 그래서 오늘은 const로 선언을 했을 때 어떤 경우에 값을 바꿀 수 있는지 정리해보려고 합니다.
const?
- 변수에 재할당을 허용하지 않는 상수를 선언할 때 사용
- 즉, const로 선언한 변수는 한 번 할당된 값이 고정되고 다른 값을 다시 할당하려고 하면 에러가 발생
const num = 10;
num = 20; // Error!
위에서 num이라는 변수는 10으로 고정되며, 다른 값으로 변경하려고 하면 에러가 발생함!
const와 데이터 유형과 동작
원시형 데이터
- 숫자, 문자열, 불리언 등 하나의 값만 가지는 데이터 유형. const로 선언 시 값 자체가 고정되어 값을 다른 값으로 변경할 수 없음
const greeting = "Hello!";
greeting = "Hi!"; // Error!
참조형 데이터
객체(Object), 배열(Array) 등 내부 요소가 변할 수 있는 데이터 유형. const로 선언하더라도 참조 주소는 고정되지만 데이터 내부 값은 변경이 가능
const cat = { name: "뭉이", age: 9 };
// 객체 내부의 속성 변경은 가능
cat.age = 10;
console.log(cat); // { name: "뭉이", age: 10 };
// 그러나 'cat' 전체를 다른 객체로 변경은 불가능
cat = { name: "조이", age: 9 }; // Error!
위에서 cat 객체는 const로 선언되어 객체 자체를 다른 것으로 바꾸는 것은 불가능하지만 객체 내부 속성(age) 값은 수정할 수 있음. 이런 차이는 const가 변수의 참조 주소값을 고정*하는 역할을 하기 때문!
참조형 데이터의 경우 주소는 고정되지만 그 내부 구조는 고정되지 않기 때문에 const로 선언해도 내부 속성을 변경할 수 있는 것임
* 참조 주소값을 고정?
변수가 가리키는 대상이 바뀌지 않는다는 뜻. const로 선언된 변수가 객체나 배열을 가리킬 때 그 객체나 배열 자체를 다른 것으로 바꾸는 건 불가능하지만 그 안에 있는 값는 바꿀 수 있다는 의미
'Languages > JavaScript' 카테고리의 다른 글
[JS] 기본 자료형과 참조 자료형의 비교 방식 (ft. 스택, 힙) (0) | 2024.11.01 |
---|---|
[JS] 구조 분해 할당(Destructuring Assignment) (1) | 2024.09.12 |
[JS] 나머지 매개변수(Rest Parameter)와 전개 연산자(Spread Operator) (0) | 2024.09.12 |
[JS] for ...in, for ...of의 차이점 정리 (2) | 2024.09.09 |
[JS] 호이스팅(Hoisting) (0) | 2024.09.09 |