나작코
2025. 11. 30. 22:45
2025. 11. 30. 22:45
답변
변수 선언은 변수를 만들고, 초기화는 메모리 공간을 확보해 기본값을 설정하는 과정이며,
할당은 그 변수에 실제 값을 넣는 과정입니다.
키워드 설명
- 변수 선언 (Declaration)
- “변수 이름을 자바스크립트 엔진에게 알려주는 것”
- 즉, 변수라는 존재를 정의하는 단계
- 변수 초기화 (Initialization)
- “선언된 변수에 메모리를 연결하고 기본값을 넣는 것”
- JS에서는 초기화 시 다음처럼 기본값이 들어간다.
- var → 선언 + 초기화가 함께 일어나며, 값은 undefined
- let / const → 초기화 단계가 선언과 분리되어 있고, 초기값이 설정되기 전까지는 TDZ(Temporal Dead Zone) 상태에 놓인다.
- 변수 할당 (Assignment)
- “초기화된 변수에 값을 넣는 것”
꼬리질문
- var / let / const에 따른 차이점이 무엇인가요?
- var는 함수 스코프이며 선언과 초기화가 함께 호이스팅되어 undefined로 접근 가능합니다.
- 반면 let과 const는 블록 스코프를 가지며 선언만 호이스팅되고 초기화되기 전까진 TDZ에 있어 접근이 불가능합니다.
- 또한 let은 재할당이 가능하지만 const는 재할당이 불가능하고, 선언 시 반드시 초기값이 필요합니다.
- TDZ(Temproal Dead Zone)란 무엇인가요?
- TDZ는 let / const 변수가 초기화되기 전에 접근할 수 없는 구간입니다.
- 엔진은 변수를 호이스팅하지만 초기화되기 전까진 실제 사용할 수 없습니다.
- 호이스팅(Hoisting)이란 무엇인가요?
- 호이스팅은 JS 엔진이 변수와 함수를 스코프 최상단에 끌어올리는 동작처럼 보이는 현상입니다.
- var는 선언 + 초기화가 함께 호이스팅되어 접근이 가능하지만, let / const는 선언만 호이스팅되고 초기화 전까지는 TDZ에 있어 접근이 불가능합니다.
- 접근 시에는 ReferenceError가 발생합니다.
- const로 선언한 객체의 값은 왜 변경 가능한가요?
- const는 변수의 ‘재할당’을 막는 것이지, 객체 내부의 ‘속성 변경’을 막는 것이 아닙니다.
- 객체는 참조(reference)로 관리되기 때문에, 참조 자체가 바뀌지만 않으면 내부 값은 변경 가능합니다.
- 확장 설명:
- const는 “변수 바인딩(참조)”을 고정
- 객체는 heap 메모리에 실제 데이터가 저장
- const 변수는 heap의 그 위치(참조)를 고정하는 것
- 내부 필드는 그 위치 안에서 변경 가능