메모리,변수,변수선언

혜빈·2023년 6월 16일

JS

목록 보기
7/21

메모리
: 데이터를 저장할 수 있는 메모리 셀의 집합체

  • 메모리 셀 하나의 크기 = 1바이트 = 8비트
  • 컴퓨터는 메모리 셀의 크기(1바이트)단위로 데이터를 저장하고 읽어들임
  • 메모리에 저장되는 모든 값은 2진수로 저장됨

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

  • 프로그래밍 언어에서 값을 저장하고 참조하는 메커니즘
  • 값의 위치를 가리키는 상징적인 이름
  • 개발자가 직접 메모리 주소를 통해 값을 저장하고 참조할 필요가 없고 변수를 통해 안전하게 값에 접근할 수 있음

변수에 여러개 값 저장하는 방법

-> 배열, 객체 같은 자료구조 사용하면
관련이 있는 여러 개의 값을 그룹화해서 하나의 값처럼 사용 가능

// 변수는 하나의 값을 저장하기 위한 수단

var userId = 1;

var userName = 'been';

// 객체나 배열 같은 자료구조 활용하면 여러개 값 그룹화 가능

var user = { id: 1, name: 'been' };

var users = [
{ id: 1, name: 'been'},
{ id: 1, name: 'Lee'}
];

// 10 + 20은 새로운 값 30을 생성하고, 그 값을 다시 읽어 들여 재사용할 수 있도록 값이 저장된 메모리 공간에 상징적인 이름을 붙인 것이 변수 !

var result = 10 + 20;

변수 이름 : 메모리 공간에 저장된 값을 식별할 수 있는
고유한 이름
// 위 예제에서 result
변수 값 : 변수에 저장된 값
// 위 예제에서 30

할당(assignment)(대입,저장) : 변수에 값을 저장하는 것
참조(reference) : 변수에 저장된 값을 읽어 들이는 것
// 변수 이름 사용해 참조 요청하면 JS엔진이 변수 이름과 매핑된 메모리 주소를 통해 메모리 공간에 접근해서 저장한 값을 반환함

식별자(identifier)
: 어떤 값을 구별해서 식별할 수 있는 고유한 이름
= 메모리 주소에 붙인 이름

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

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

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

  • 메모리 상에 존재하는 어떤 값을 식별할 수 있는 이름은 모두 식별자

  • 선언에 의해 자바스크립트 엔진에 식별자의 존재를 알림

변수 선언(variable declaration)
: 변수를 생성하는 것

  • 값 저장 위한 메모리 공간 확보 후,
    변수 이름과 메모리 공간의 주소 연결해서 값을 저장할 수 있게 준비하는 것

  • 변수 사용하려면 반드시 선언 필요

  • var, let, const 키워드 사용

// var 키워드의 단점
: 블록 레벨 스코프를 지원하지 않고 함수 레벨 스코프만 지원함
따라서 전역 변수가 선언되어 심각한 부작용 발생
var 말고 다른 키워드 사용 추천

var score; // 변수 선언(변수 선언문)
-> score 변수 이름을 등록하고 값을 저장할 메모리 공간 확보함
이때, 확보된 메모리 공간에는 undefined값이 암묵적 할당되어 초기화 됨

undefined : JS에서 제공하는 원시타입의 값(primitive value)

JS엔진의 변수 선언 단계

  1. 선언 단계
    : 변수 이름을 등록해서 JS엔진에 변수의 존재를 알림
  2. 초기화 단계
    : 값을 지정하기 위한 메모리 공간을 확보하고 암묵적으로 undefined를 할당에 초기화 함
  • 변수 이름을 비롯한 모든 식별자는 '실행 컨텍스트'에 등록되어 관리됨
  • 변수 이름과 변수 값은 실행 컨텍스트 내에
    key(키) / value(값) 형식인 객체로 등록되어 관리됨

var 키워드
: 선언 단계와 초기화 단계가 동시에 진행됨
어떠한 값도 할당하지 않아도 undefined라는 값을 갖는다

ReferenceError(참조에러)
: 선언하지 않은 식별자에 접근하면 발생하는 에러
//var는 초기화가 동시에 진행되기 때문에 발생하지 않음

profile
최강 개발자를 꿈꾸는 병아리

0개의 댓글