답변

변수 선언은 변수를 만들고, 초기화는 메모리 공간을 확보해 기본값을 설정하는 과정이며,
할당은 그 변수에 실제 값을 넣는 과정입니다.

키워드 설명

  1. 변수 선언 (Declaration)
    1. “변수 이름을 자바스크립트 엔진에게 알려주는 것”
    2. 즉, 변수라는 존재를 정의하는 단계
  2. 변수 초기화 (Initialization)
    1. “선언된 변수에 메모리를 연결하고 기본값을 넣는 것”
    2. JS에서는 초기화 시 다음처럼 기본값이 들어간다.
      1. var → 선언 + 초기화가 함께 일어나며, 값은 undefined
      2. let / const → 초기화 단계가 선언과 분리되어 있고, 초기값이 설정되기 전까지는 TDZ(Temporal Dead Zone) 상태에 놓인다.
  3. 변수 할당 (Assignment)
    1. “초기화된 변수에 값을 넣는 것”

꼬리질문

  1. var / let / const에 따른 차이점이 무엇인가요?
    • var는 함수 스코프이며 선언과 초기화가 함께 호이스팅되어 undefined로 접근 가능합니다.
    • 반면 let과 const는 블록 스코프를 가지며 선언만 호이스팅되고 초기화되기 전까진 TDZ에 있어 접근이 불가능합니다.
    • 또한 let은 재할당이 가능하지만 const는 재할당이 불가능하고, 선언 시 반드시 초기값이 필요합니다.
  2. TDZ(Temproal Dead Zone)란 무엇인가요?
    • TDZ는 let / const 변수가 초기화되기 전에 접근할 수 없는 구간입니다.
    • 엔진은 변수를 호이스팅하지만 초기화되기 전까진 실제 사용할 수 없습니다.
  3. 호이스팅(Hoisting)이란 무엇인가요?
    • 호이스팅은 JS 엔진이 변수와 함수를 스코프 최상단에 끌어올리는 동작처럼 보이는 현상입니다.
    • var는 선언 + 초기화가 함께 호이스팅되어 접근이 가능하지만, let / const는 선언만 호이스팅되고 초기화 전까지는 TDZ에 있어 접근이 불가능합니다.
    • 접근 시에는 ReferenceError가 발생합니다.
  4. const로 선언한 객체의 값은 왜 변경 가능한가요?
    • const는 변수의 ‘재할당’을 막는 것이지, 객체 내부의 ‘속성 변경’을 막는 것이 아닙니다.
    • 객체는 참조(reference)로 관리되기 때문에, 참조 자체가 바뀌지만 않으면 내부 값은 변경 가능합니다.
    • 확장 설명:
      • const는 “변수 바인딩(참조)”을 고정
      • 객체는 heap 메모리에 실제 데이터가 저장
      • const 변수는 heap의 그 위치(참조)를 고정하는 것
      • 내부 필드는 그 위치 안에서 변경 가능

+ Recent posts