04장 변수

RA_MI·2022년 3월 7일
0
post-thumbnail

변수란?

자바스크립트에서 변수란 값을 저장하기 위해 확보한 메모리 공간 자체 또는 메모리 공간을 식별하기 위한 식별자 입니다

변수를 선언하면 값을 저장하기 위한 메모리 공간을 확보하고 변수 이름과 확보된 메모리 공간의 주소를 연결해서 값을 저장할 수 잇게 준비하는 것 입니다.

CPU에서는 연산을, 메모리에서는 기억을 담당하고 있다.

메모리(memory)는 데이터를 저장할 수 있는 메모리 셀(memory cell)의 집합체로, 메모리 셀 하나의 크기는 1byte(8bit)이며, 컴퓨터는 메모리 셀의 크기 단위(1byte)로 데이터를 저장하거나 읽어들입니다. 각 셀은 고유의 메모리 주소를 가지며, 이는 메모리 공간의 위치를 나타내고, 또한 메모리에 저장되는 모든 값은 2진수로 변환되어 저장됩니다.

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

  1. 변수 명 - 메모리 공간에 저장된 값을 식별할 수 있는 고유한 이름
  2. 변수 값 - 변수에 저장된 값
  3. 할당 - 변수에 값을 저장하는 것
  4. 참조 - 변수에 저장된 값을 읽어 들이는 것

var, let, const

  1. 선언 : 변수 이름을 등록해서 자바스크립트 엔진에 변수의 존재를 알립니다(스코프가 참조하는 대상)
  2. 초기화 : 값을 저장하기 위한 메모리 공간을 확보하고 암묵적으로 undefined를 할당해 초기화합니다.
  3. 할당 : undefined로 초기화된 변수에 실제값을 할당합니다.

var

  • 변수의 중복 선언이 가능합니다
  • 변수의 호이스팅이 일어납니다
  • var 키워드로 선언한 변수는 undefined로 초기화 합니다
  • 선언과 초기화가 동시에 진행됩니다

let

  • 변수 중복 선언이 불가능합니다
  • 값을 재할당 가능합니다
  • 선언단계와 초기화 단계가 분리되어 진행됩니다

const

  • 변수 중복 선언이 불가능합니다
  • 값을 재할당 할 수 없습니다
  • 선언단계와 초기화 단계가 분리되어 진행됩니다.
  • 선언과 할당이 동시에 진행 되어야만 합니다.

식별자 네이밍 규칙

  • 하나 이상의 글자로 이루어져야 한다.
  • 첫 번째 글자는 문자이거나 '$', '_'여야한다.
  • 두 번째 이후의 글자는 숫자, 문자, '$', '_'여야한다.
  • '$', '_' 외의 특수 문자는 사용할 수 없다.
  • 길이의 제한은 없다.
  • 키워드는 식별자로 사용할 수 없다.
  • 상수 값을 표현하는 단어 true, false, null은 식별자로 사용할 수 없다.
  • 대소문자를 구분한다.
  • 영문을 제외한 한글이나 다른 언어도 사용할 수 있지만, 권장하지 않는다.

카멜 케이스: 모든 단어를 이어 쓰나, 첫 단어는 소문자로 시작하고 다음 단어부터 대문자로 시작한다.
파스칼 케이스: 모든 단어를 이어쓰고, 모든 단어의 첫 글자는 대문자이다.

호이스팅

  • 코드가 실행하기 전 변수선언/함수선언이 해당 스코프의 최상단으로 끌어 올려진 것 같은 현상을 말한다.
  • JS 엔진은 코드를 실행하기 전에 실행 가능한 코드를 형상화하고 구분하는 과정(실행 컨텍스트 위해)을 거친다.
  • JS 엔진은 코드를 실행하기 전 모든 선언(var, let, const, function, class)을 스코프에 등록한다.
  • 코드 실행 전 이미 변수선언/함수선언이 저장되어 있기 때문에 선언문보다 참조/호출이 먼저 나와도 오류 없이 동작한다.
  • 실행 컨텍스트는 실행 가능한 코드가 실행되기 위해 필요한 환경을 의미하고 실행되기전 이러한 실행 컨텍스트 과정(코드를 구분하는 과정)을 거친다.

자바스크립트의 모든 선언에는 호이스팅이 일어난다.

값의 재할당

var 으로 선언한 변수는 값을 재할당 할 수 있다 재할당은 현재 변수에 저장된 값을 버리고 새로운 값을 저장하는 것이다.
재할당은 변수에 저장된 값을 다른 값으로 변경한다. 그래서 변수라고 하는것이다. 만약 값을 재할당할 수 없다면 그것은 변수가 아닌 상수라 한다.

ES6에서 도입된 const 키워드는 변수 재할당이 금지된다.

변수에 값을 재할당 하면 score 변수의 값을 80 -> 90 으로 변경된다. 처음 할당되었던 공간은 지우고 그 메모리 공간에 재할당 값 90을 새로 저장하는것이 아니라 새로운 메모리 공간을 확보하고 그 메모리 공간에 숫자 값 90을 저장한다

score 변수의 이전 값인 undefined와 80은 어떤 변수도 값으로 갖고 있지 않다.(어떤 식별자와도 연결되어 있지 않다) 이것은 undefined와 80이 더이상 필요하지 않다는것이다. 이런 불필요한 값들은 가비지 콜렉터에 의해 메모리에서 자동 해제된다.

가비지 콜렉터: 애플리케이션이 할당한 메모리 공간을 주기적으로 검사해 더이상 사용되지 않는 메모리를 헤자하는 기능이다. JS는 가비지 콜렉터를 내장하고 있는 매니지드 언어로서 이를 통하여 메모리 누수를 방지한다.

0개의 댓글