[JS Deep Dive] 4장. 변수

lyshine·2023년 3월 22일
0

JS Deep Dive 정리

목록 보기
1/18
  • 데이터의 사용 : 데이터를 입력 받는다. → 결과를 출력한다.

변수

변수는 프로그래밍 언어에서 데이터를 관리하기 위한 핵심 개념
하나의 값을 저장하기 위해 확보한 메모리 공간 자체 또는 그 메모리 공간을 식별하기 위해 붙인 이름
값이 저장된 메모리 공간에 상징적인 이름을 붙인 것

메모리

  • 데이터를 저장할 수 있는 메모리 셀의 집합체
  • 컴퓨터는 메모리 셀의 크기 1바이트(8비트) 단위로 데이터를 저장하거나 읽는다.
  • 각 셀은 고유의 메모리 주소를 갖는데, 이 주소는 메모리 공간의 위치를 나타낸다.
  • 컴퓨터는 모든 데이터를 2진수로 처리하기 때문에 메모리에 저장되는 데이터는 모두 2진수로 저장된다.
  • 동일한 코드여도 코드가 실행 될때마다 값이 저장될 주소는 변경된다. (직접적인 메모리 제어를 허용하지 않음)

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

값은 메모리 공간에 저장되어 있다.

식별자

  • 변수 이름을 식별자라고도 한다.
  • 식별자는 어떤 값을 구별해서 식별할 수 있는 고유한 이름을 말한다.
  • 식별자는 값이 아니라 어떤 값이 저장되어 있는 메모리 주소를 기억해야 한다. (즉, 식별자는 메모리 주소에 붙인 이름이라고 할 수 있다)
    • result(식별자= 변수이름) → 0x0669F913(메모리주소) / 30(값 : 메모리)
  • 변수, 함수, 클래스 등의 이름은 모두 식별자이고, 네이밍 규칙을 준수해야 한다.
  • 선언에 의해 자바스크립트 엔진에 식별자 존재를 알린다.

변수 선언

  • 변수를 사용하려면 반드시 선언이 필요하다. 변수 선언은 변수를 생성하는 것을 말한다.

  • 메모리 공간을 확보해 변수 이름과 확보된 메모리 공간의 주소를 연결해서 값을 저장한다.

  • var, let, const 키워드 사용

  • 선언하지 않은 식별자에 접근시 ReferenceError(참조 에러) 발생

  • 변수 선언 단계

    • 선언 단계 : 변수 이름을 등록해서 자바스크립트 엔진에 변수의 존재를 알린다.
    • 초기화 단계 : 값을 저장하기 위한 메모리 공간을 확보하고 암묵적으로 undefined를 할당해 초기화

var

  • 선언단계와 초기화 단계 동시에 진행
  • 변수 이름 등록 → 초기화 단계 undefined 할당해 초기화(초기화가 자동 수행되어 어떤한 값도 할당하지 않아도 자동으로 undefined라는 값을 가짐)

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

  • 자바스크립트 엔진은 변수 선언이 런타임(순차적으로 실행되는 시점) 이전 단계에서 먼저 실행된다.
  • 이와 같이 변수 선언문이 코드의 앞으로 끌어 올려진 것처럼 동작하는 것을 “호이스팅”이라 한다.

값의 할당

  • 변수에 값을 할당(대입, 저장) ‘=’
console.log(score); //undefined
var score; //변수 선언
score = 80; //값의 할당
console.log(score); //80

var score = 80; //변수 선언과 값의 할당
  • 변수 선언은 소스코드가 순차적으로 실행되는 런타임 이전에 실행되지만,
  • 값의 할당은 런타임에 실행된다.
  • 변수에 값을 할당할때는 이전 값 undefined가 저장된 메모리 공간을 지우지 않고, 새로운 메모리 공간을 확보하여 그곳에 할당 값을 저장한다.

값의 재할당

  • 재할당은 이미 값이 할당되어 있는 변수에 새로운 값을 또다시 할당하는 것이다.
  • 값을 재할당할 수 없어서 변수에 저장된 값을 변경할 수 없는 것은 상수라 한다. (const : 상수)
  • 재할당도 마찬가지로 새로운 메모리 공간을 확보하고 그 공간에 값을 저장한다.
  • 더이상 필요하지 않는 이전의 값들은 불필요하기 때문에 가바지 콜렉터에 의해 메모리에서 자동 해제된다.
    • 가비지 콜렉터 : 애플리케이션이 할당한 메모리 공간을 주기적으로 검사하여 더이상 사용되지 않는 메모리를 해제하는 기능, 메모리 누수를 방지한다.

식별자 네이밍 규칙

  • 식별자는 특수문자를 제외한 문자, 숫자, _, $ 기호를 포함할 수 있다.
  • 숫자로 시작하는 것은 허용하지 않는다.
  • 예약어는 식별자로 사용할 수 없다.
    • 예약어 : 프로그래밍 언어에서 사용되고 있거나 사용될 예정인 단어
  • 카멜케이스(camelCase), 스네이크케이스(snake_case), 파스칼 케이스(PascalCase)
  • 일반적으로 변수나 함수 이름에는 카멜케이스를 사용하고, 생성자함수, 클래스 이름에는 파스칼 케이스를 사용한다.

0개의 댓글