오늘은 프리트랙에서 배웠던 내용들을 복습하고 문제를 풀었다. 빨리 끝났기 때문에 모던자바스크립트 Deep Dive + 프로그래머스 0단계 처음부터 풀기 위주로 공부했다.
변수
- 변수는 하나의 값을 저장하기 위해 확보한 메모리 공간 자체 또는 그 메모리 공간을 식별하기 위해 붙인 이름, 즉 값의 위치를 가리키는 상징적인 이름임.
- 변수 이름을 '식별자'라고도 하는데, 식별자는 어떤 값을 구별해서 식별할 수 있는 고유한 이름을 말함.
- 식별자는 값이 아닌 메모리 주소를 기억함.
- 식별자는 변수 뿐만 아니라 함수, 클래스 등의 이름을 모두 식별자라고 함.
- var 는 블록레벨 스코프가 아닌 함수 레벨 스코프를 지원하기 때문에 심각한 오류를 발생시킬 수 있음.
- 선언단계 : 변수 이름을 등록해서 자바스크립트 엔진에 변수의 존재를 알림
- 초기화 단계 : 값을 저장하기 위한 메모리 공간을 확보하고 암묵적으로 undefined를 할당해 초기화함.
- 선언하지 않은 식별자를 참조하면 ReferenceError(참조에러) 발생함
호이스팅
- 변수 선언이 소스코드가 한 줄씩 순차적으로 실행되는 시점, 즉 런타임이 아니라 그 이전 단계에서 먼저 실행됨.
- 자바스크립트 엔진은 변수 선언이 소스코드의 어디있든 상관없이 다른 코드보다 먼저 실행함.
- 변수 선언문이 선두로 끌어 올려진 것처럼 동작하는 자바스크림트 고유의 특징이 변수 호이스팅임. ( var, let, const, function, function*, class 모두)
변수 / 상수
- var : 값 재할당 가능 > 변수
- const : 값 재할당 불가능 > 상수
- 값을 재할당할 수 없어서 변수에 저장된 값을 변경할 수 없다면 변수가 아니라 상수임.
- 변수에 값을 재할당하면 이전에 저장되어있던 메로리 공간을 지우고 그 메모리 공간에 재할당하는 것이 아니라, 새로운 메모리 공간을 확보하고 그 메모리 공간에 숫자 값을 저장하는 것임.
- [가비지 콜렉터] : 애플리케이션이 할당한 메모리 공간을 주기적으로 검사하여 더 이상 사용되지 않는 메모리를 해제하는 기능을 말함. 자바스크립트는 가비지 콜렉터를 내장하고 있는 매니지드 언어로서 가비지 콜렉터를 통해 메모리 누수를 방지함.
- 매니지드언어 vs 언매니지드언어 (메모리 관리 방식에 따라)
- 언매니지드 언어
- c언어 - 개발자가 명시적으로 메모리를 할당하고 해제하기 위해 malloc()과 free()같은 저수준 메모리 제어 기능을 제공.
- 메모리 제어를 개발자가 주도할 수 있으므로 개발자의 역량에 따라 최적의 성능을 확보할 수 있지만 그 반대의 경우 치명적 오류를 생산할 가능성도 있음.
- 매니지드 언어 :
- 자바스크립트 - 개발자의 직접적인 메모리 제어를 허용하지 않으며, 개발자가 명시적으로 메모리를 할당하고 해제할 수 없음. > 가비지컬렉터가 그 역할을 함.
- 개발자의 역량에 의존하는 부분이 상대적으로 작아져 어느 정도 일정한 생산성 확보 가능, 그러나 성능 명에서 어느정도 손실은 감수.
함수 레벨 스코프 / 블록 레벨 스코프
- 함수레벨 스코프 > 추후 자세하게 살펴보기!
- 블록레벨 스코프 > 추후 자세하게 살펴보기!
값, 리터럴, 표현식
- 값 : 표현식이 평가되어 생성된 결과, 변수에 할당되는 것이 값.
- 리터럴 : 사람이 이해할 수 있는 문자 또는 약속된 기호를 사용해 값을 생성하는 표기법
3 //숫자 리터럴
- 표현식 : 값으로 평가될 수 있는 문. 표현식이 평가되면 새로운 값을 생성하거나 기존 값을 참조함.
var score = 100;