[Javascript] 변수 & var / let / const

Yeojin Choi·2021년 10월 4일
1

Javascript

목록 보기
2/11

1. 변수

1) 변수의 의미, 필요성

값을 저장하기 위해 확보한 메모리 공간 자체. 메모리 공간을 식별하기 위해 붙인 이름. 값의 위치를 가리키는 상징적인 이름

  • 컴퓨터는 메모리상의 임의의 위치(메모리 주소)에 데이터를 2진수로 바꾸어 저장한다
  • 개발자는 연산 결과가 저장된 메모리 공간에 직접 접근할 수 없다.
  • 또한 값이 저장될 메모리 주소는 임의로 결정되기 때문에 코드가 실행되기 전에는 값이 저장될 메모리 주소를 알 수 없다.
  • 프로그래밍 언어에서 값을 저장하고 참조하는 메커니즘으로 값의 위치를 가리키는 상징적인 이름이다
  • 변수는 컴파일러 또는 인터프리터에 의해 값이 저장된 메모리 공간의 주소로 치환되어 실행되기 때문에 개발자가 안전하게 변수를 통해 값에 접근할 수 있다.
  • 변수 이름(변수 명) : 메모리 공간에 저장된 값을 식별할 수 있는 고유한 이름. 변수 이름을 사용해 참조 요청 시 자바스크립트 엔진에 의해 변수 이름에 매핑된 메모리 주소를 통해 메모리 공간에 접근해서 저장된 값을 반환한다.
  • 변수 값 : 변수에 저장된 값
  • 할당, 대입, 저장 : 변수에 값을 저장하는 것
  • 참조 : 변수에 저장된 값을 읽어들이는 것

2) 식별자

메모리 주소에 붙인 이름, 변수 이름

  • 메모리 공간에 저장된 값을 구별해 식별해 내기 위해 값이 저장되어있는 메모리 주소를 기억해야함
  • 식별자는 메모리 주소와 매핑 관계를 맺으며 매핑 정보도 메모리에 저장되어야 함

3) 변수 선언

값을 저장하기 위한 메모리 공간을 확보 하고 변수 이름과 확보된 메모리 공간의 주소를 연결해서 값을 저장할 수 있게 준비하는 것 .
스코프(실행 컨텍스트의 렉시컬 환경) 에 변수 식별자를 등록해 자바스크립트 엔진에 변수의 존재를 알린다.

* var, const, let 의 차이

  • var :
    - 함수 레벨 스코프 : 함수 외부에서 선언한 변수를 코드 블록(if 문, for 문, while 문, 함수, try/catch 문 등) 내에서 선언해도 전역 변수가 된다.
    - 같은 스코프 내에서 중복 선언 허용한다 : 중복 선언 시 초기화 문이 없는 변수 선언문은 무시되고, 초기화 문이 있다면 먼저 선언한 변수 값이 변경될 수도 있다.
    • 소스 코드 평가 과정에서 선언 + 초기화가 동시에 진행. 변수 호이스팅에 의해 변수 선언문 이전에 참조 가능 (undefined긴 하지만)
  • let :
    - 블록 레벨 스코프
    • 중복 선언 불가 - SyntaxError 발생
    • 재할당 가능
    • 런타임 이전에 초기화 없이 선언만 진행되기 때문에 변수 선언문 이전에 참조 시 참조 에러 발생. 스코프 시작 지점부터 초기화 시작 지점까지 변수를 참조할 수 없게 되는데 이를 일시적 사각 지대(Temporal. Dead Zone. TDZ) 라고 부른다.
  • const :
    - 블록 레벨 스코프
    - 재할당 금지 : 프로퍼티 동적 생성, 삭제, 객체 변경은 가능
    • 소스 코드 평가 과정에서 선언 + 초기화 + 할당 진행.

4) 값의 할당과 재할당

var name = 'Tom'; //변수 선언, 값 할당
name = 'Mary' // 재할당
  • 값의 할당은 런타임에 실행된다.
  • undefined 가 저장되어 있던 공간에 새롭게 저장하는 것이 아니라 새로운 메모리 공간 확보 후 그 곳에 할당 값을 저장한다.
  • name 변수의 이전 값인 undefined, Tom 은 어떤 식별자와도 연결되어 있지 않은 불필요한 값이다. 이 값들은 가비지 콜렉터에 의해 메모리에서 자동 해제된다.

* 가비지 콜렉터란?

  • 가비지 콜렉터 : 애플리케이션이 할당한 메모리 공간을 주기적으로 검사하여 더 이상 사용되지 않는 메모리(= 어떤 식별자도 참조하지 않는 메모리 공간)를 해제하는기능
  • 자바스크립트는 가비지 콜렉터를 내장하고 있는 매니지드 언어로 가비지 콜렉터를 통해 메모리 누수를 방지한다.
profile
프론트가 좋아요

0개의 댓글