자바스크립트 Deep Dive - 04장 변수

ddullgi·2022년 9월 18일
0
post-thumbnail

chapter4. 변수


4.1 변수

하나의 값을 저장하기 위해 확보한 메모리 공간 자체 또는 그 메모리 공간을 식별하기 위해 붙인 이름을 말한다.

프로그래밍 언어에서 값을 저장하고 참조하는 메커니즘으로, 값의 위치를 가리키는 상징적인 이름이다.

변수 이름(변수명): 메모리 공간에 저장된 값을 식별할 수 있는 고유한 이름

변수 값: 변수에 저장된 값

할당 : 변수에 값을 저장하는 것

참조: 변수의 저장된 값을 읽어 들이는 것


사용하는 이유

  • 메모리는 여러 개의 메모리 셀을 가지며 각 셀은 메모리 주소를 가지고 있다.

  • 메모리 주소를 통해 직접 값에 접근 하는 것은 치명적인 오류를 야기할 수 도 있음.

  • 기억 하고 싶은 값을 메모리에 저장하고, 저장된 값을 읽어 들여 재사용하기 위해 변수라는 메커니즘을 사용한다.


장점

  • 개발자가 직접 메모리 주소를 통해 값을 저장하고 참조할 필요 없이 변수를 통해 값에 안전하게 접근할 수 있다.

4.2 식별자

어떤 값을 구별해서 식별할 수 있는 고유한 이름을 말한다.(값이 아니라 메모리 주소를 기억하고 있음)


4.3 변수 선언

값을 저장하기 위한 메모리 공간을 확보하고 변수 이름과 확보된 메모리 공간을 연결해서 값을 저장할 수 있게 준비하는 것

  • 변수 선언에 의해 확보된 공간은 확보가 해제 되기 전까지는 누구도 확보된 메모리 공간을 사용할 수 없도록 보호된다,
  • 변수 이름을 비롯한 모든 식별자는 실행 컨텍스트에 등록된다.
  • 존재하지 않는 변수를 참조하면 참조에러 발생

4.4 호이스팅

변수 선언문이 코드의 선두로 끌어 올려진 것처럼 동작하는 자바스크립트의 고유의 특징

자바스크립트는 인터프리터 언어이기 때문에 한 줄 씩 순차적으로 진행된다.


4.5 값의 할당

변수 선언은 소스코드가 순차적으로 실행되는 시점인 런타임 이전에 먼저 실행되지만 값의 할당은 소스코드가 순차적으로 실행되는 시점인 런타임에 실행된다.

  • 변수 선언: 런타임 이전 실행
  • 값의 할당: 런타임에 실행

console.log(score); // undefined

var score; // 1) 변수 선언
score = 80; // 2) 변수 할당

console.log(score); // 80

*주의

변수 선언시 undefined가 저장되어 있던 메모리 공간을 지우고 그 메모리 공간에 할당 값을 새로 저장하는 것이 아니다. (새로운 메모리 공간을 확보하고 그곳에 할당 값을 저장한다.)


4.6 값의 재할당

변수 할당시 변수값이 저장되어 있던 메모리 공간을 지우고 그 메모리 공간에 할당 값을 새로 저장하는 것이 아니다. (새로운 메모리 공간을 확보하고 그곳에 할당 값을 저장한다.)


그렇다면 변수 선언변수 할당 시에 사용했던 메모리 공간은 어디로 갔을까?

정답은 바로 가비지 콜렉터에 의해 메모리에서 자동으로 해제된다.




가비지 콜렉터(garbage collector)

가비지 콜렉터는 애플리케이션이 할당한 메모리 공간을 주기적으로 검사하여 더 이상 사용되지 않는 메모리를 해제하는 기능을 말한다. 더 이상 사용되지 않는 메모리란 간단히 말하자면 어떤 식별자도 참조하고 있지 않는 메모리 공간을 의미한다. 자바스크립트는 가비지 콜렉터를 내장하고 있는 매니지드 언어로서 가비지 콜렉터를 통해 메모리 누수를 방지한다.


언매니지드 언어와 매니지드 언어

메모리 관리 방식에 따른 분류

언매니지드 언어매니지드 언어
C 언어자바스크립트
메모리 관리가 개발자의 영역개발자의 직접적인 메모리 제어 X
개발자의 역량에 따라 최적의 성능을 확보 가능하지만 그 반대의 경우 치명적인 오류를 생산할 수 도 있다.개발자의 역량이 작용하는 부분이 상대적으로 작아져 일정한 생산성 확보 가능. 대신 성능면 에서의 손실을 감수해야 된다.
profile
프론트엔드개발자를 꿈꾸는 예비 개발자

0개의 댓글