📂4장 변수

    변수?

    변수의 정의

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

    🔎 용어 정리

    • 할당(대입, 저장) : 변수에 값을 저장하는 것
    • 참조 : 변수에 저장된 값을 읽어 들이는 것

    변수의 필요성

    • 기억하고 싶은 값을 메모리에 저장하고, 저장된 값을 읽어 들여 재사용하기 위해 변수 사용

    식별자

    • 식별자 : 메모리 상에 존재하는 어떤 값을 식별할 수 있는 이름
    • 식별자는 메모리 주소를 기억 (값을 기억하는 것이 아님.)

    변수 선언

    var age; // 변수 선언
    • 💻 var 키워드 변수 선언시 자바스크립트 엔진이 하는 일
        1. 선언 : 변수 이름 등록해서 자바스크립트 엔진에 변수의 존재를 알림.
        2. 초기화 : 값을 저장하기 위한 메모리 공간 확보, 암묵적으로 undefined를 할당해 초기화함.

    • 만약 2.초기화를 거치지 않는다면?
      • 확보된 메모리 공간에 이전에 사용했던 값이 있을 가능성이 있음.
      • 이러한 값을 쓰레기 값(garbage value)라함.

    var 키워드는 암묵적으로 초기화를 수행하므로 이러한 위험으로부터 안전.


    ⏳ const와 let 키워드로 선언시 자바스크립트 엔진은 어떤 일을 할까?

    console.log(A) // undefined
    var A;
    
    console.log(B)
    const B;
    // Uncaught SyntaxError: Missing initializer in const declaration
    
    console.log(C)
    let C;
    // Uncaught ReferenceError: C is not defined

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

    console.log(A) // undefined
    var A; // 변수 선언
    • 원칙 : 자바스크립트는 한 줄씩 순차적으로 실행 (console.log(A) 후 var A 변수 선언)
    • 예외 : 모든 선언문(변수 선언문, 함수 선언문 등) 먼저 실행함. => 변수 호이스팅

    🔎 용어 정리

    • 런타임 : 소스코드가 한 줄씩 순차적으로 실행되는 시점
    • 변수 호이스팅 : 변수 선언문이 코드의 선두로 끌어 올려진 것처럼 동작하는 것

    값의 할당

    👩‍💻 사람이 코드를 쓸 때

    var age = 15; // 변수 선언과 값의 할당

    💻 자바스크립트 엔진

    var age; // 변수 선언
    age = 15; // 값의 할당
    • 자바스크립트 엔진은 변수 선언과 값의 할당을 동시에 해도 2개의 문으로 나누어 각각 실행함.
    • 변수 선언은 변수 호이스팅에 의해 먼저 실행, 값의 할당은 런타임에 실행

    값의 할당

    • 변수 선언시 초기값인 undefined가 저장되었던 메모리 공간을 지우고 그 자리에 새롭게 값(15)을 할당 하는 것이 아님
    • 새로운 메모리 공간을 확보하고 그곳에 할당 값(15)을 저장함.

    📋 예제로 알아보기

    👩‍💻 사람이 코드를 쓸 때

    console.log(score); // undefined
    var score = 100; // 변수 선언과 값의 할당
    console.log(score) //100

    💻 자바스크립트 엔진

    var score; // 변수 선언
    console.log(score); // undefined
    score = 100; // 값의 할당
    console.log(score) // 100

    📋 책 예제로 풀어보기

    • [예제 04-10]
      console.log(score); 
      score = 80; 
      var score;
      console.log(score) // ??
    • 내가 생각한 단계
      var score; // 변수 호이스팅에 의해 변수 선언 먼저 실행 
      // 변수 선언 외의 코드들은 런타임대로 실행 
      console.log(score); // undefined
      score = 80; // 값의 할당 
      console.log(score) // 80
    • Ask the Computer
      console.log(score); // undefined
      score = 80; 
      var score; console.log(score) // 80

    값의 재할당

    var age = 15; // 변수 선언 및 값의 할당
    age = 20; // 값의 재할당

    💻 자바스크립트 엔진

    • 새로운 메모리 공간을 확보하고 그 공간에 재할당 값(20)을 저장
    • 이전 값(15)이 저장됐던 메모리 공간을 지우고 그 공간에 재할당 값(20)을 저장하는 것이 아님.
    • 이전 값(15)은 식별자와도 연결되어 있지 않으므로 가비지 콜렉터에 의해 메모리에서 자동 해제됨.
    • 하지만 메모리에서 언제 해체될지는 예측할 수 없다.

    🔎 용어 정리

    • 가비지 콜렉터 : 할당한 메모리 공간을 주기적으로 검사하여 사용되지 않는 메로리를 해제하는 기능, 메모리 누수를 방지

    상수

    • 값을 재할당할 수 없는 변수
    • const 키워드 사용

    참고 : ⏳ 해결하지 못한 궁금점 (이후 학습에서 해결되면 업데이트할 부분)


    [모던 자바스크립트 Deep Dive, ⌜이웅모 ⌟, 위키북스, 20210103]를 읽고 정리한 글입니다.

    '개발언어 > [JS] deep-dive 정리' 카테고리의 다른 글

    [9장] 단축 평가 - 논리 연산자를 사용한 단축 평가  (0) 2022.12.12
    [9장] 타입 변환  (0) 2022.12.12
    8장 제어문  (2) 2022.12.10
    6장 데이터 타입  (0) 2022.12.07
    5장 표현식과 문  (0) 2022.12.03

    댓글