Deep Dive 04장 변수

@hanminss·2021년 11월 9일
0

Deep Dive

목록 보기
1/16
post-thumbnail

모던 자바스크립트 deep dive

04장 변수

변수 : 값의 위치를 가리키는 상징적인 이름

변수는 값이 아닌 해당 값을 가지고 있는 메모리의 주소를 저장하고 있다.

변수 선언

var let const 키워드를 사용하여 변수를 선언한다. var는 es5 문법임

var 키워드는 여러 단점이 있는데 가장 대표적인 함수 레벨 스코프를 지원한다는 것임. es6 문법에서 새로 도입된 키워드인 let과 const는 이러한 단점을 보완하기 위해서 만들어졌음

var x;

자바스크립트는 다른 언어와 다르게 함수를 선언만 해 두어도 메모리에 암묵적으로 초기화 하여 undefined를 저장하고 주소를 변수에 저장함. 다른언어에서는 이전 다른 애플리케이션이 사용했던 값이 남아 있어 쓰레기 값이 나올 수 있지만 자바스크립트는 암묵적으로 초기화라는 과정을 거처 이러한 위험으로 부터 안전함.

자바스크립트 엔진은 변수 선언이 소스코드의 어디에 있든 상관없이 다른 코드보다 먼저 실행됨. 이를 자바스크립트 고유의 특징인 호이스팅이라고 함. 변수 뿐 아니라 다른 선언 키워드도 호이스팅 됨. var 키워드는 호이스팅 과정에선 변수에 메모리 주소만 할당되어 암묵적으로 undefined로 초기화 하고 호이스팅 과정 이후 런타임 에서 값이 할당됨. 변수에 값을 할당할 때는 이전 undefined를 저장한 메모리에 저장되는게 아닌 새로운 메모리 공간을 확보하여 할당하고 저장되있던 주소를 바꿈. 변수가 재할당 되면 이전에 undefined를 저장하던 메모리는 불필요해 지는데 이는 가비지 콜렉터에 의해 메모리에서 자동 해제됨. 자바스크립트는 가비지 콜렉터를 내장하고 있는 매니지드 언어로서 가비지 콜렉터를 통해 메모리 누수를 방지함.(메모리 누수 : 컴퓨터 프로그램이 필요하지 않은 메모리를 계속 점유하고 있는 현상)

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

  1. 언매니지드 언어는 개발자가 명시적으로 메모리를 할당하고 해제하기 위해 저수준 메모리 제어기능을 제공한다. 이는 개발자의 역량에 따라 최적의 성능을 낼수도 치명적 오류를 만들수도 있음.
  2. 매니지드 언어는 메모리 할당 및 해제를 위한 메모리 관리 기능을 언어 차원에서 담당하고 개발자의 직접적인 메모리 제어를 허용하지 않음.
// 호이스팅이 먼저 일어나기 때문에 아래 코드도 작동한다.
console.log(score); // undefined 
score = 80;
var score;
console.log(socre); //80

식별자 네이밍

var firstName; // 카멜케이스

var first_name; // 스네이크 케이스

var FirstName; // 파스칼 케이스

var strFirstName // 헝가리언 케이스

0개의 댓글