본문 바로가기
JAVA Script/모던 자바스크립트 Deep Dive

[ 4장 ] 변수

by Dream Jin 2022. 4. 9.

4장 변수

4-1. 변수란 무엇인가? 왜 필요한가?

  • 변수(variable)는 하나의 값을 저장하기 위해 확보한 메모리 공간 자체 또는 그 메모리 공간을 식별하기 위해 붙인 이름을 말한다.
  • 프로그래밍 언어에서 값을 저장하고 참조하는 메커니즘으로, 값의 위치를 가리키는 상직적인 이름.
 var userId = 1;
//변수는 하나의 값을 저장하기 위한 수단.

 var user = { id: 1, name: 'Lee' };
//객체, 배열과 같은 자료구조를 사용하여 여러 개의 값을 하나의 값처럼 사용할수 있다.

변수이름(변수명) : 메모리 공간에 저장된 값을 식별할 수 있는 이름 (ex) userId
변수값 : 변수에 저장된 값 (ex) 1
할당assignment(대입, 저장) : 변수에 값을 저장하는 것
참조reference : 변수에 저장된 값을 읽어 들이는 것

4-2. 식별자

  • 변수의 이름을 식별자 identifier 라고도 한다, 식별자는 어떤 값을 구별해서 식별할 수 있는 고유한 이름 이며 값이 아니라 메모리 주소를 기억하고 있다.
    즉 메모리 주소에 붙인 이름 이라고도 할 수 있다.
  • 식별자란 변수 이름에서만 국한 되는것이 아닌, 변수, 한수, 클래스 등의 모든 이름에 사용이 가능하지만, 네이민 규칙을 준수하여야만 한다.

4-3. 변수 선언

  • 변수를 생성 하는 것. 즉 값을 저장 하기위한 공간을 확보하고, 변수 이름과 확보된 메모리 공간의 주소를 연결 해서 값을 저장할 수 있게 준비하는 것.
var score; //변수선언
  • 이때 scroe라는 변수를 선언 하였지만, 값을 할당하지 않았다. (초기화 시키지 않았다.)
    이때는 자바스크립트의 독특한 특징으로 엔진에 의해 undefined 라는 값이 암묵적으로 할당되어 초기화 된다.

undefined = 자바스크립트에서 제공하는 원시 타입의 값

  • 엔진에서는 2단계에 거쳐 변수 선언을 수행한다.

선언 단계 : 변수 이름을 등록해서 자바스크립트 엔진에 변수의 존재를 알린다.

초기화 단계 : 값을 저장하기 위해 메모리 공간을 확보하고 암묵적으로 undefined 를 할당해 초기화 한다.

4-4. 변수 선언의 실행 시점과 변수 호이스팅

console.log(score);

var score;
  • 자바스크립트의 경우 인터프리터에 의해 한줄씩 실행 되므로 참조에러 ReferenceError가 발생할 것 같지만, 발생하지 않는다.
  • 변수 선언이 소스코드 한 줄씩 순차적으로 실행되는 시점, 즉 런타임runtime이 아니라 그 이전 단계에서 먼저 실행되기 때문이다.
  • 즉 자바스크립트 엔진은 변수 선언이 소스코드 어디에 있던 상관 없이 다른코드 보다 먼저 실행하고 이러한 고유한 특징을 변수 호이스팅 variable hoisting 이라고 한다.

4-5. 값의 할당

var score; //변수 선언
score = 80 ; //값의 할당

var score = 80; //변수 선언과 값의 할당이 하나의 문으로 단축이 가능하다.
  • 변수 선언은 소스코드가 순차적으로 실행되는 시점인 런타임 이전에 먼저 실행되지만 값의 할당은 소스코드가 순차적으로 실행되는 시점인 런타임에 실행된다.

4-6. 값의 재할당

var score = 80; //변수 선언과 값의 할당
score = 90; //값의 재할당
  • 재할당이란 이미 값이 할당되어 있는 변수에 새로운 값을 다시 할당하는것.
  • 값을 재할당 할수 없어서 변수의 값을 변경할수 없다면 그것은 상수Constant라고 한다.
    img
  • 여기서 이전의 값 80의 메모리 공간을 지우고 그 메모리 공간에 90의 값을 재할당 하는것이 아니라, 새로운 메모리 공간을 확보하고 그 공간에 90의 값을 저장한다. 이때 기존의 값들은 가비지 콜렉터 에 의해서 자동 해제 된다.

가비지 콜렉터 garbage collector

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

4-7. 식별자 네이밍 규칙

  • 식별자는 어떠한 값을 구별해서 식별해낼수 있는 고유한 이름 이다.

    1. 식별자는 특수문자를 제외한 문자, 숫자, 언더스코어(_), 달러 기호($)를 포함할 수 있다.
    2. 단, 식별자는 특수문자를 제외한 문자, 언더스코어(_), 달러 기호($)로 시작해야 하며, 숫자로 시작하는 것은 허용하지 않는다.
    3. 예약어는 식별자로 사용할 수 없다.
      예약어 -> 프로그래밍 언어에서 사용되고 있거나 사용될 예정인 단어
  • 네이밍 컨벤션은 하나 이상의 영어 단어로 구성된 식별자를 만들 때 가독성 좋게 하기 위한 명명 규칙

    var firstName; //카멜 케이스(camelCase)로 변수나 함수의 이름 명명에 사용
    
    var first_name; //스네이크 케이스(snake_case) 
    
    var FirstName; //파스칼 케이스(PascalCase)로 생성자 함수, 클래스의 이름 명명에 사용
    
    //헝가리언 케이스(typeHungarianCase)
    var strFirstName; // type + indentifier
    var $elem = document.getElementById('myId'); // DOM노드
    var observable$ = fromEvent(document, 'click'); // RxJS 옵저버블

댓글