22.11.07 월요일 39p~49p
04장 변수
- 변수 호이스팅
변수 선언은 소스코드가 한 줄씩 순차적으로 실행되는 시점, 즉 런타임이 아니라 그 이전 단계에서 먼저 실행된다. 자바스크립트 엔진은 변수 선언을 포함한 모든 선언문(변수/함수 선언문)을 소스코드에서 찾아 먼저 실행한다. 그리고 소스코드의 평가 과정이 끝나면 비로소 변수 선언을 포함한 모든 선언문을 제외하고 소스코드를 한 줄씩 순차적으로 실행한다.
변수 선언문이 코드의 선두로 끌어 올려진 것처럼 동작하는 자바스크립트 고유의 특징을 변수 호이스팅이라 한다.
- 값의 할당
변수 선언은 소스코드가 순차적으로 실행되는 시점인 런타임 이전에 먼저 실행되지만 값의 할당은 소스코드가 순차적으로 실행되는 시점인 런타임에 실행된다.
- 가비지 콜렉터
애플리케이션이 할당한 메모리 공간을 주기적으로 검사하여 더 이상 사용되지 않는 메모리를 해제하는 기능을 말한다. 더 이상 사용되지 않는 메모리란 간단히 말하자면 어떤 식별자도 참조하지 않는 메모리 공간을 의미한다. 가비지 콜렉터를 통해 메모리 누수를 방지한다.
22.11.08 화요일 50p~58p
05장 표현식과 문
- 값
식(표현식)이 평가되어 생성된 결과를 말한다.
ex) x = 10 + 20 => 변수 10 + 20이 평가되어 생성된 숫자 값 30이 할당된다.
- 리터럴
사람이 이해할 수 있는 문자 또는 약속된 기호를 사용해 값을 생성하는 표기법이다.
ex) 숫자 리터럴 ‘3’
- 표현식
‘값’으로 평가될 수 있는 문이다. 표현식이 평가되면 새로운 값을 생성하거나 기존값을 참조한다.
ex1) var score = 50 + 50; => 50 + 50도 평가되어 숫자 값 100을 생성하므로 표현식이다.
ex2)score; => 식별자 참조는 값을 생성하지는 않지만 값으로 평가되므로 표현식이다.
- 문
프로그램을 구성하는 기본 단위이자 최소 실행 단위다. 문의 집합으로 이뤄진 것이 바로 프로그램이며, 문을 작성하고 순서에 맞게 나열하는 것이 프로그래밍이다.
ex1) var x; => 변수 선언문 ex2) var x = 5; => 할당문
이외에도 함수 선언문, 조건문, 반복문이 있다.
- 토큰
문은 여러 토큰으로 구성된다. 토큰이란 문법적인 의미를 가지며, 문법적으로 더 이상 나눌 수 없는 코드의 기본 요소를 의미한다. 예를 들어, 키워드, 식별자, 연산자, 리터럴, 세미콜론이나 마침표등의 특수 기호는 문법적인 의미를 가지며, 문법적으로 더 이상 나눌 수 없는 코드의 기본 요소이므로 모두 토큰이다.
ex) var, sum, =, 1, +, 2 => 모두 토큰이다.
- 표현식인 문과 표현식이 아닌 문
표현식인 문과 표현식이 아닌 문을 구별할 수 있는 가장 간단한 방법은 변수에 할당해보는 것이다.
ex1) var foo = var x; => 표현식이 아닌 문은 값처럼 사용할 수 있다. ex2) var x; x = 100; => 할당문은 표현식이지만 완전문이기도 하다. 즉, 할당문은 표현식인 문이다.
- 완료 값
크롬 개발자 도구에서 표현식이 나닌 문을 실행하면 언제나 완료 값인 undefined를 출력한다. 완료값은 표현식의 평가 결과가 아니다.
22.11.09 수요일 59p~73p
06장 데이터 타입 || 원시 데이터 타입
- 숫자 타입
자바스크립트의 숫자 타입은 정수 만을 위한 타입이 없고 모든 수를 실수로 처리한다.
- 문자열 타입
기본 따옴표는 작은따옴표(‘) 이다.
템플릿 리터럴 내에서는 이스케이프 시퀀스를 사용하지 않고 줄바꿈이 허용된다.
- 불리언 타입
- undefined 타입
- null 타입
프로그래밍 언어에서 null은 변수에 값이 없다는 것을 의도적으로 명시할 때 사용한다. 변수에 null을 할당하는 것은 변수가 이전에 참조하던 값을 더 이상 참조하지 않겠다는 의미이다. 이는 이전에 할당되어 잉ㅆ던 값에 대한 참조를 명시적으로 제거하는 것을 의미하며, 자바스크립트 엔진ㅇ은 누구도 참조핮지 않는 메모리 공간에 대해 가비지 콜렉션을 수행할 것이다.
함수가 유효한 값을 반환할 수 없는 경우 명시적으로 null을 반환하기도 한다. 예를 들어, HTML 요소를 검색해 반환하는 document.querySelector 메서드는 조건에 부합하는 HTML 요소를 검색할 수 없는 경우 에러 대신 null을 반환한다.
- 심벌 타입
벼경 불가능한 원시 타입의 값이다. 다른 값과 중복되지 않는 유일무이한 값이다. 주로 이름이 충돌할 위험이 없는 객체의 유일무히한 프로퍼티 키를 만들기 위해 사용한다.
06장 데이터 타입 || 객체 타입
자바스크립트는 객체 기반의 언어이며, 자바스크립트를 이루고 있는 거의 모든 것이 객체이다.
정적 타입 언어는 변수의 타입을 변경할 수 없으며, 변수에 선언한 타입에 맞는 값만 할당할 수 있다. 정적 타입 언어는 컴파일 시점에 타입 체크를 수행한다. 만약 타입 체크를 통과하지 못했다면 에러를 발생시키고 프로그램의 실행 자체를 막음으로써 안정적인 코드의 구현을 통해 런타입에 발생하는 에러를 줄일 수 있도록 한다. 대표적인 정적 타입 언어로 c, c++, 자바, 코틀린 등이 있다.
자바스크립트는 정적 타입 언어와 다르게 변수를 선언할 때 타입을 선언하지 않는다. 다만 var, let, const키워드를 사용해 변수를 선언할 뿐이다. 즉, 자바스크립트의 변수는 선언이 아닌 할당에 의해 타입이 결정된다. 그리고 재할당에 의해 변수의 타입은 언제든지 동적으로 변할 수 있다. 이러한 특징을 동적 타이핑이라고 하며, 자바스크립트를 동적 타입 언어라고 한다. 대표적인 동적 타입 언어로 자바스크립트, 파이썬 등이 있다.
'CS > 모던 자바스크립트 Deep Dive' 카테고리의 다른 글
11장 원시값과 객체의 비교 / 12장 함수 (0) | 2023.04.05 |
---|---|
9장 타입 변환과 단축평가 / 10장 객체 리터럴 / 11장 원시값과 객체 비교 (0) | 2023.04.05 |
7장 연산자 / 8장 제어문 (0) | 2023.04.05 |
1장 프로그래밍 / 03장 자바스크립트 개발 환경과 실행 방법 (0) | 2023.04.05 |
모던 자바스크립트 Deep Dive 독서 기록지 (0) | 2023.04.05 |