[JavaScript] 모던 자바스크립트 Deep Dive로 배우는 JS #4 변수(1)

ChilihC·2022년 4월 5일
0
post-thumbnail

TIL(Today I Learned) 🧑🏻‍💻


4. 변수(1)


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

  • 변수는 프로그래밍 언어에서 데이터를 관리하기 위한 핵심 개념이다.

  • 자바스크립트 코드를 계산(평가, evaluation)하려면 먼저 기호(리터럴, literal과 연산자, operator)의 의미를 알고 있어야 하며 식(표현식, expression)의 의미도 해석(파싱, parsing)할 수 있어야 한다.

메모리(memory)는 데이터를 저장할 수 있는 메모리 셀(memory cell)의 집합체다.

  • 메모리 셀 하나의 크기는 1바이크(8비트)이며, 컴퓨터는 메모리 셀의 크기, 즉 1바이트 단위로 데이터를 저장(write)하거나 읽어(read)들인다.

  • 각 셀은 고유의 메모리 주소(memory address)를 갖는다. 메모리 주소는 메모리 공간의 위치를 나타내며, 0부터 시작해서 메모리의 크기만큼 정수로 표현된다.

  • 메모리에 저장되는 데이터는 데이터의 종류(숫자, 텍스트, 이미지, 동영상 등)와 상관없이 모두 2진수로 저장된다.

  • 메모리 주소를 통해 값에 직접 접근하는 것은 치명적 오류를 발생시킬 가능성이 높은 매우 위험한 일이다. 만약 실수로 운영체제가 사용하고 있는 값을 변경하면 시스템을 멈추게 하는 치명적인 오류가 발생할 수도 있다. 따라서 자바스크립트는 직접적인 메모리 제어를 허용하지 않는다.

  • 값이 저장될 메모리 주소는 코드가 실행될 때 메모리의 상황에 따라 임의로 결정된다. 따라서 메모리 주소를 통해 값에 직접 접근하려는 시도는 올바른 방법이 아니다.

변수(variable)는 하나의 값을 저장하기 위해 확보한 메모리 공간 자체 또는 그 메모리 공간을 식별하기 위해 붙인 이름을 말한다.

  • 변수에 값을 저장하는 것을 할당(assignment(대입, 저장))이라 하고, 변수에 저장된 값을 읽어 들이는 것을 참조(reference)라 한다.

4.2  식별자

  • 변수 이름을 식별자(identifier)라고도 한다. 식별자는 어떤 값을 구별해서 식별할 수 있는 고유한 이름을 말한다.

  • 식별자는 값이 아니라 메모리 주소를 기억하고 있다. 식별자로 값을 구별해서 식별한다는 것은 식별자가 기억하고 있는 메모리 주소를 통해 메모리 공간에 저장된 값에 접근할 수 있다는 의미다.

  • 식별자라는 용어는 변수 이름에만 국한해서 사용하지 않는다. 예를들어 변수, 함수, 클래스 등의 이름은 모두 식별자다.

  • 선언(declaration)에 의해 자바스크립트 엔진에 식별자의 존재를 알린다.


4.3  변수 선언

  • 변수 선언(variable declaration)이란 변수를 생성하는 것을 말한다.

  • 변수를 사용하려면 반드시 선언이 필요하다. 변수를 선언할 때는 var, let, const 키워드를 사용한다.

var score; // 변수 선언(변수 선언문) 
  • 변수를 선언한 이후 아직 변수에 값을 할당하지 않았다. 따라서 변수 선언에 의해 확보된 메모리 공간은 비어 있을 것으로 생각할 수 있으나 확보된 메모리 공간에는 자바스크립트 엔진에 의해 undefined 라는 값이 암묵적으로 할당되어 초기화된다.

  • 자바스크립트 엔진은 변수 선언을 다음과 같은 2단계에 거쳐 수행한다.

    • 선언 단계: 변수 이름을 등록해서 자바스크립트 엔진에 변수의 존재를 알린다.
    • 초기화 단계: 값을 저장하기 위한 메모리 공간을 확보하고 암묵적으로 undefined를 할당해 초기화한다.
  • 변수 이름을 비롯한 모든 식별자는 실행 컨텍스트(execution context)에 등록된다.

  • var 키워드를 사용한 변수 선언은 선언 단계와 초기화 단계가 동시에 진행된다. 선언 단계에서 변수 이름을 등록하고, 초기화 단계를 통해 변수에 암묵적으로 undefined를 할당해 초기화한다.

  • 만약 선언하지 않은 식별자에 접근하면 ReferenceError(참조 에러)가 발생한다.


새로운 용어 정리


  • ES5 vs ES6: var 키워드는 여러 단점이 있다. 가장 대표적인 것이 블록 레벨 스코프(block-level-scope)를 지원하지 않고 함수 레벨 스코프(function-level-scope)를 지원한다는 것이다.

  • 키워드(keyword): 키워드는 자바스크립트 코드를 해석하고 실행하는 자바스크립트 엔진이 수행할 동작을 규정한 일종의 명령이다. 자바스크립트 엔진은 키워드를 만나면 자신이 수행해야 할 약속된 동작을 수행한다.

  • 실행 컨텍스트(execution context): 자바스크립트 엔진이 소스코드를 평가(evaluation)하고 실행하기 위해 필요한 환경을 제공하고 코드의 실행 결과를 실제로 관리하는 영역이다. 자바스크립트 엔진은 실행 컨텍스트를 통해 식별자(identifier)와 스코프(scope)를 관리한다.

  • 쓰레기 값(garbage value): 초기화 단계를 거치지 않아 확보된 메모리 공간에 이전에 다른 애플리케이션이 사용했던 값이 남아있는 것


참고 문헌


* 모던 자바스크립트 Deep Dive ( 자바스크립트의 기본 개념과 동작 원리 ) / 이웅모 지음

profile
developer junior

0개의 댓글