6.18 토 읽은 내용 정리
10+20 을 계산할 때 사람은 계산과 기억을 모두 두뇌에서만 하지만 컴퓨터는 CPU를 사용해 연산하고, 메모리를 사용해 데이터를 기억한다.
메모리는 데이터를 저장할 수 있는 셀(memory cell)의 집합체다.
메모리 셀 하나의 크기는 1바이트(8bit)이며 컴퓨터는 메모리 셀의 크기(1바이트 단위)로 데이터를 저장하거나 읽는다.
각 셀은 고유의 메모리 주소를 갖는다. 하지만 메모리 주소를 통해 직접 접근하는 것은 노노노, 개발자의 직접적인 메모리 제어를 허용하지 않을 뿐더러 허용하더라도 코드가 실행될 때마다 메모리 주소는 변경되어 오류가 발생할 수 있다.
변수란? 메모리 공간을 식별하기 위해 붙여진 이름, 값의 위치를 가리키는 상징적인 이름 (ex.메모리 주소 -> 판교로 235)
변수는 컴파일러 도는 인터프리터에 의해 값이 저장된 메모리 공간의 주소로 치환되어 실행되기때문에 개발자가 직접 메모리 주소를 통해 값을 저장할 필요가 없다.
할당
- 변수에 값을 저장하는 것 (대입, 저장)
참조
- 변수에 저장된 값을 읽어 들이는 것
어떤 값을 구별해서 식별할 수 있는 고유한 이름
⚠️ 식별자는 값이 아니라 메모리 주소를 기억하는 것
변수 이름 뿐만 아니라 함수, 클래스 등의 메모리 상에 존재하는 어떤 값을 식별할 수 있는 이름은 모두 식별자다
변수 생성이란 메모리 공간을 확보하고 변수 이름과 메모리 공간의 주소를 연결해서 값을 저장할 수 있기 준비하는 것
변수 선언에는 var
, let
, const
가 쓰이며 var는 문제가 많아 ES6부터 도입된 let,const를 쓰는게 좋다
var title; //변수 선언
변수를 선언하면 확보된 메모리공간은 비어있지 않고 자바스크립트 엔진에 의해 undefined라는 값이 할당되어 초기화 된다.
var
를 이용한 변수선언은 선언 단계
와 초기화 단계
가 동시에 진행된다.
따라서 var로 만든 변수는 어떤 값도 할당하지 않아도 undefined라는 값을 갖는다.
console.log(title); // undefined
var title //변수 선언문
자바스크리브는 인터프리터에 의해 한 줄씩 순차적으로 실행되므로 console.log가 먼저 실행된다. 하지만 변수가 없는데 에러가 뜨지 않는 이유는?
변수 선언이 소스코드가 한 줄씩 순차적으로 실행되는 시점, 즉 런타임이 아니라 그 전 단계에서 먼저 실행되기 때문이다.
자바스크립트 엔진은 변수 선언이 어디있던 다른 코드보다 먼저 실행되어 어디서든 변수를 참조할 수 있다.
이처럼 변수 선언문이 코드의 최상단으로 끌어 올려진 것처럼 동작하는 것을 q변수 호이스팅
이라 한다.
변수 선언 뿐만 아니라 var,let,const,function,class등의 모든 식별자는 호이스팅 된다.
모든 선언문은 런타임 이전 단계에서 먼저 실행!!
변수 선언과 값의 할당을 하나의 문장으로 표현해도 자바스크립트 엔진은 변수의 선언과 값의 할당을 2개로 나누어 각각 실행한다.
⚠️ 이전 값 undefined가 저장되어있던 메모리 공간 위에 할당한 값이 덮어씌어지는게 아니라 새로운 메모리 공간을 확보하고 값을 저장한다.
var
,let
을 사용해 값을 재할당 할때도 새로운 메모리 공간을 확보하고 재할당한 값을 저장한다.
const
는 재할당이 금지 된다. 이러한 것을 상수라 부른다.
식(표현식)이 평가되어 생성된 결과
⚠️ 헷갈리지 말것!
var sum = 10+20;
sum 변수에 할당되는 것은 10+20이 아닌 결과값 30이다.
표현식은 값으로 평가될 수 있는 문(statement)다. 즉 표현식이 평가되면 새로운 값을 생성하거나 기존값을 참조한다.
프로그램을 구성하는 기본 단위이자 최소 실행 단위, 명령문이라고도 한다.
문의 집합이 프로그램이며, 문을 작성하고 순서에 맞게 나열하는 것이 프로그래밍
문은 여러 토큰
으로 구성된다.
토큰
- 문법적으로 더 이상 나눌 수 없는 코드의 기본 요소를 의미한다.
객체, 함수, 배열 등...
자바스크립트는 객체 기반의 언어이며 자바스크립트를 이루고 있는 거의 모든 것이 객체이다. 원시타입 이외의 값은 모두 객체 타입이다.
자바스크립트 엔진은 데이터 타입, 즉 값의 종류에 따라 정해진 크기의 메모리 공간을 확보한다.