[JavaScript] 변수

oznni·2021년 7월 18일
0

변수 선언 키워드

키워드스코프재선언재할당
varfunction-level scope가능가능
letblock-level scope불가가능
constblock-level scope불가불가

변수 선언 키워드는 var, let, const 3가지가 전부다. 변수 선언에 의해 확보된 메모리 공간은 undefined라는 값이 암묵적으로 할당되어 초기화된다. 덕분에 값을 할당하지않고 변수를 참조할 경우 쓰레기값이 나올 수 있는 위험으로 부터 안전하다.


변수 호이스팅

변수, 식별자 등 모든 선언문은 런타임 이전에 실행되고 값의 할당은 런타임에 실행된다. 이에 따라 변수 선언문이 코드의 선두로 끌어 올려진 것처럼 동작하는 특징을 뜻한다.

console.log(score); // undefined
var score;

c++이나 자바, 파이썬 같으면 에러가 발생했을 이 코드. 변수 선언 이전에 변수를 사용해도 자바스크립트에서는 에러가 발생하지 않는다. 단, var인 경우만 해당되고, let과 const인 경우 에러가 발생한다.


값의 재할당

변수에 값을 재할당 할 경우 이전 값 80이 저장되어 있던 메모리 공간을 지우고 그 공간에 재할당 값 90을 새롭게 저장하지 않는다. 새로운 메모리 공간을 확보해서 값을 저장한다. 이전 값 undefined와 80은 불필요한 값으로 가비지 컬렉터에 의해 메모리에서 자동 해제된다. 단, 메모리에서 언제 해제될지는 예측할 수 없다.


가비지 컬렉터

애플리케이션이 할당한 메모리 공간을 주기적으로 검사하여 더이상 사용되지 않는 메모리를 해제하는 기능으로, 메모리 누수를 방지한다.


매니지드 언어 VS 언매니지드 언어

매니지드 언어

  • 자바스크립트와 같이 가비지 컬렉터를 내장하고 있는 언어.
  • 메모리 관리 기능을 언어 차원에서 담당.
  • 즉, 개발자가 명시적으로 메모리를 할당 및 해제 불가.
  • 장점 : 개발자의 역량에 의존하는 부분이 상대적으로 작아져 어느 정도 일정한 생산성을 확보할 수 있음.
  • 단점 : 성능 면에서 어느 정도 손실은 감수할 수 밖에 없음.

언매니지드 언어

  • c언어가 언매니지드 언어.
  • 개발자가 명시적으로 메모리를 할당하고 해제하기 위해 malloc(), free()와 같은 저수준의 메모리 제어 기능을 제공.
  • 장점 : 개발자가 직접적인 메모리 제어를 주도할 수 있으므로 개발자의 역량에 따라 최적의 성능을 확보할 수 있음.
  • 단점 : 그 반대의 경우 치명적인 오류를 생산할 가능성도 있음.

자바스크립트를 공부하면서 새롭게 알게된 내용과 자바스크립트의 독특한 특징 위주로 내용을 정리해봤다.


참고

모던 자바스크립트 Deep Dive, 이웅모 (2020)

profile
Android Developer.

0개의 댓글