JavaScript Deep Dive 4~6

harbour·2022년 6월 18일
0

숨 참고 Deep Dive ~

목록 보기
2/8
post-thumbnail

6.18 토 읽은 내용 정리

Ch4. 변수

10+20 을 계산할 때 사람은 계산과 기억을 모두 두뇌에서만 하지만 컴퓨터는 CPU를 사용해 연산하고, 메모리를 사용해 데이터를 기억한다.

메모리는 데이터를 저장할 수 있는 셀(memory cell)의 집합체다.
메모리 셀 하나의 크기는 1바이트(8bit)이며 컴퓨터는 메모리 셀의 크기(1바이트 단위)로 데이터를 저장하거나 읽는다.
각 셀은 고유의 메모리 주소를 갖는다. 하지만 메모리 주소를 통해 직접 접근하는 것은 노노노, 개발자의 직접적인 메모리 제어를 허용하지 않을 뿐더러 허용하더라도 코드가 실행될 때마다 메모리 주소는 변경되어 오류가 발생할 수 있다.

변수란? 메모리 공간을 식별하기 위해 붙여진 이름, 값의 위치를 가리키는 상징적인 이름 (ex.메모리 주소 -> 판교로 235)

변수는 컴파일러 도는 인터프리터에 의해 값이 저장된 메모리 공간의 주소로 치환되어 실행되기때문에 개발자가 직접 메모리 주소를 통해 값을 저장할 필요가 없다.

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

식별자

어떤 값을 구별해서 식별할 수 있는 고유한 이름

⚠️ 식별자는 값이 아니라 메모리 주소를 기억하는 것

변수 이름 뿐만 아니라 함수, 클래스 등의 메모리 상에 존재하는 어떤 값을 식별할 수 있는 이름은 모두 식별자다

변수 선언

변수 생성이란 메모리 공간을 확보하고 변수 이름과 메모리 공간의 주소를 연결해서 값을 저장할 수 있기 준비하는 것
변수 선언에는 var, let, const가 쓰이며 var는 문제가 많아 ES6부터 도입된 let,const를 쓰는게 좋다

? var의 문제점

  • 함수 레벨 스코프에 따라 호이스팅이 제대로 이뤄지지 않는다
  • 변수의 중복 선언이 가능해서 변수 값이 변할 가능성이 크다
var title; //변수 선언

변수를 선언하면 확보된 메모리공간은 비어있지 않고 자바스크립트 엔진에 의해 undefined라는 값이 할당되어 초기화 된다.

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

var를 이용한 변수선언은 선언 단계초기화 단계가 동시에 진행된다.
따라서 var로 만든 변수는 어떤 값도 할당하지 않아도 undefined라는 값을 갖는다.

변수 호이스팅

console.log(title); // undefined
var title //변수 선언문

자바스크리브는 인터프리터에 의해 한 줄씩 순차적으로 실행되므로 console.log가 먼저 실행된다. 하지만 변수가 없는데 에러가 뜨지 않는 이유는?

변수 선언이 소스코드가 한 줄씩 순차적으로 실행되는 시점, 즉 런타임이 아니라 그 전 단계에서 먼저 실행되기 때문이다.

자바스크립트 엔진은 변수 선언이 어디있던 다른 코드보다 먼저 실행되어 어디서든 변수를 참조할 수 있다.
이처럼 변수 선언문이 코드의 최상단으로 끌어 올려진 것처럼 동작하는 것을 q변수 호이스팅이라 한다.
변수 선언 뿐만 아니라 var,let,const,function,class등의 모든 식별자는 호이스팅 된다.
모든 선언문은 런타임 이전 단계에서 먼저 실행!!

값의 할당

변수 선언과 값의 할당을 하나의 문장으로 표현해도 자바스크립트 엔진은 변수의 선언과 값의 할당을 2개로 나누어 각각 실행한다.

⚠️ 이전 값 undefined가 저장되어있던 메모리 공간 위에 할당한 값이 덮어씌어지는게 아니라 새로운 메모리 공간을 확보하고 값을 저장한다.

var,let을 사용해 값을 재할당 할때도 새로운 메모리 공간을 확보하고 재할당한 값을 저장한다.
const는 재할당이 금지 된다. 이러한 것을 상수라 부른다.

Ch5. 표현식과 문

식(표현식)이 평가되어 생성된 결과

⚠️ 헷갈리지 말것!

var sum = 10+20;

sum 변수에 할당되는 것은 10+20이 아닌 결과값 30이다.

표현식

표현식은 값으로 평가될 수 있는 문(statement)다. 즉 표현식이 평가되면 새로운 값을 생성하거나 기존값을 참조한다.

프로그램을 구성하는 기본 단위이자 최소 실행 단위, 명령문이라고도 한다.

문의 집합이 프로그램이며, 문을 작성하고 순서에 맞게 나열하는 것이 프로그래밍
문은 여러 토큰으로 구성된다.
토큰 - 문법적으로 더 이상 나눌 수 없는 코드의 기본 요소를 의미한다.

Ch6. 데이터 타입

원시 타입

  • 숫자(number)
    숫자, 정수와 실수 구분 없이 하나의 숫자 타입만 존재
  • 문자열(String)
    텍스트 데이터를 나타내는 데 사용한다.
  • 불리언(boolean)
    논리적 참(true), 거짓(false)를 나타낸다.
  • undefined
    개발자가 의도적으로 할당한 값이 아니라 자바스크립트 엔진이 변수를 초기화 할 때 사용하는 값. 변수를 참조했을 때 undefined가 반환된다면 참조한 변수가 선언 이후 값이 할당된 적이 없는, 초기화되지 않은 변수다.
  • null
    의도적으로 값이 비었다는 것을 명시할 때 쓴다.
    함수가 유효한 값을 반환할 수 없는 경우 명시적으로 null을 반환하기도 한다.
  • 심벌(symbol)
    ES6에 추가된 7번째 타입으로 변경 불가능한 원시 타입의 값이다.

객체 타입

객체, 함수, 배열 등...
자바스크립트는 객체 기반의 언어이며 자바스크립트를 이루고 있는 거의 모든 것이 객체이다. 원시타입 이외의 값은 모두 객체 타입이다.

데이터 타입의 필요성

자바스크립트 엔진은 데이터 타입, 즉 값의 종류에 따라 정해진 크기의 메모리 공간을 확보한다.

  • 값을 저장할 때 확보해야 하는 메모리 공간의 크기를 결정하기 위해
  • 값을 참조할 때 한 번에 읽어 들여야 할 메모리 크기를 결정하기 위헤
  • 메모리에서 읽어 들인 2진수를 어떻게 해석할지 결정하기 위해
profile
Onion on Sale

0개의 댓글