[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개의 댓글

관련 채용 정보