ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 모던 자바스크립트 Deep Dive - 변수
    JavaScript 2021. 9. 16. 18:58

    keyword : [ 변수 , 메모리 , 식별자 , 선언 , 호이스팅 , 할당 ]

    하나의 값을 저장하기 위해

    확보한 메모리 공간 자체 또는 메모리 공간을 식별하기 위한 이름


    변수란 무엇인가? 왜 필요한가?


    애플리케이션은 데이터를 다룬다.

    아무리 복잡한 애플리케이션이라 해도 결국에는 데이터를 입력 받아서 처리 과정을 거친 후, 결과를 출력하는 것이다.

     

    컴퓨터는

    • CPU를 사용해 연산한다.
    • 메모리를 사용해 데이터를 기억한다.

    메모리

    • 메모리는 데이터를 저장할 수 있는 메모리 셀의 집합체 이다.
    • 메모리 셀 하나의 크기는 1바이트이다.
    • 컴퓨터는 1바이트 단위로 데이터를 저장하거나 읽는다.
    • 각 셀은 고유의 메모리 주소를 갖는다.
    • 메모리 주소 = 메모리 공간의 위치
    • 메모리에 저장되는 모든 값은 2진수로 저장된다.

     

    CPU를 통해 연산을 하면 연산 된 값을 재 사용 할 수 없다.

    연산된 값을 메모리에 저장을 하여야 재 사용 할 수 있다.


    메모리에 저장


    메모리 주소를 통해 직접 접근 = 치명적 오류를 발생 시킬 가능성이 매우 높다.

    자바스크립트는 개발자가 메모리에 직접 접근 할 수 없다.

    값이 저장될 메모리 주소는 상황에 따라 임의로 저장

    따라서, 메모리에 값을 저장하여 재 사용 하기 위해, 우리는 변수를 사용한다.

     

    변수 이름 = 메모리 공간에 저장된 값을 식별할 수 있는 고유한 이름


    변수 값 = 변수에 저장된 값

    할당 = 변수에 값을 저장하는 것


    식별자


    식별자는 어떤 값을 구별해서 식별할 수 있는 고유한 이름을 뜻한다.

    식별자는 값이 저장되어 있는 메모리 주소와 매핑 관계를 맺으며, 이 관계 정보도 메모리에 저장되어야 한다.

    식별자는 값이 아니라 메모리 주소를 기억하고 있다.

    변수 , 함수 , 클래스 등의 이름은 모두 식별자 이다.


    변수 선언


     변수를 생성하는 것

    • 값을 저장하기 위한 메모리 공간을 확보
    • 변수 이름과 확보된 메모리 공간의 주소를 매핑하여 값을 저장

    변수를 사용하려면 반드시 선언이 필요하다.

    변수 선언 이후, 변수에 값은 할당하지 않았을 때, 확보된 메모리 공간에 자바스크립트 엔진에 의해 undefined라는 값이 할당되어 초기화 된다. 이를 초기화 단계라고 한다.


    호이스팅


    자바스크립트 코드는 인터프리터에 의해 한 줄씩 순차적으로 실행된다.

    변수 선언은 소스코드가 한 줄씩 순차적으로 실행되는 시점, 런타임이 아니라 그 이전 단계에서 선언이 된다.

    console.log(score);  // undefined
    
    let score;  // 변수 선언

     

    자바스크립트 엔진은 런타임 이전에 소스코드 평가 과정을 거친다.

    이것을 변수 호이스팅이라 한다. 

    (변수 선언을 포함한 모든 선언문을 선언한다.)


    변수 할당


    변수 할당은 런타임 시점에 진행된다.

    let score;
    score = 80;

    위 코드와 같이 변수는 우변의 값을 좌변의 변수에 할당한다.

     

    let score = 80;

     

    두 코드 중 첫 번째 코드는 선언과 할당을 나누어서 코드를 작성해주었고,

    두번째 코드는 선언과 할당을 동시에 작성을 하였다.

    결과적으로, 변수 선언과 값의 할당을 하나의 문으로 단축하여도 2개의 문으로 나누어 실행하게 된다. 

     

    변수에 값을 할당할 때는 이전 값이 저장된 메모리 공간을 비우는게 아니라 새로운 메모리 공간을 확보하고 저장한다.

    댓글

Designed by Tistory.