1) 컴퓨터의 작동 방식
역할 - CPU : 연산 / 메모리 : 데이터 기억
*메모리 : 데이터를 저장할 수 있는 메모리 셀(cell)의 집합체. 메모리 셀 하나의 크기는 1바이트(8비트). 컴퓨터는 메모리 셀의 크기인 1바이트 단위로 데이터를 저장, 읽음.
ex. 10 + 20 의 계산 - 코드를 계산(평가)하고, 10,20,+라는 기호(리터럴과 연산자)의 의미를 알고, 10+20이라는 식(표현식)의 의미를 해석(파싱)한다.
2) 메모리 주소
메모리 셀의 각 셀은 고유의 메모리 주소를 갖는다. 메모리 크기만큼 정수로 표현되며, 메모리에 저장되는 데이터는 모두 2진수로 저장된다.
3) 변수
메모리 주소를 통해 직접 값에 접근하는 것은 치명적 오류를 발생시킬 가능성이 있어 매우 위험하다. 따라서 자바스크립트는 첫째로 메모리 제어를 허용치 않으며, 둘째로 코드가 실행될 때마다 메모리 주소는 변경되기 때문에 메모리 주소를 통해 값에 접근하는 것은 불가하다.
그러므로 값을 저장하고 이를 다시 읽어들여 재사용하기 위한 방법으로 변수를 사용한다. 변수를 통해 값을 저장할 메모리 공간을 확보하고 이를 재사용하기 위해 식별할 수 있는 이름을 붙여 사용하는 것이다. 이로써 값에 접근하는 위험을 피할 수 있다. 결국 변수란 사람의 입장에서 이해 가능한 언어로 컴퓨터와 소통하기 위한 언어적 수단으로서, 의미 있는 이름을 사용하는 것이 권장된다.
*변수 이름(변수명) : 메모리 공간에 저장된 값을 식별할 수 있는 고유한 이름
*변수 값 : 변수에 저장된 값
*할당(대입, 저장) : 변수에 값을 저장하는 것
*참조 : 변수에 저장된 값들 읽어들임
*선언 : 식별자(변수)의 존재를 자바스크립트 엔진에 알림
4) 식별자
변수처럼 값을 구별하여 이해 및 인식이 가능한(식별이 가능한) 고유한 이름을 말한다. 변수, 함수, 클래스 등의 이름이 모두 식별자다. 이름을 짓는 규칙은 네이밍 규칙을 따른다.
*네이밍 규칙 - 특수문자를 제외한 문자, 숫자, 언더스코어, 달러 기호를 포함할 수 있다. 단, 이름이 그것들로 시작해야 한다. 숫자로 시작되는 것은 허용치 않는다. 또한 프로그래밍 언어에서 이미 사용되거 있거나 사용 예정인 예약어는 사용할 수 없다.
5) 변수 선언
값을 저장할 메모리 공간을 확보하고, 값을 저장한 메모리 공간의 주소를 변수 이름과 연결짓는 작업이다. 변수 사용을 위해 반드시 필요하다. 변수를 선언할 때 사용하는 키워드(자바스크림트 엔진이 수행할 동작을 규정한 일종의 명령어)로는 const, let, var가 있다.
자바스크립트 엔진은 변수 선언 시 다음의 2단계를 수행한다.
1) 변수 이름을 등록하여 자바스크립트 엔진에 변수의 존재를 알림
2) 변수 선언 시 최초의 값을 undefined로 암묵적으로 할당하여 초기화(변수가 선언된 이후로 최초로 값을 할당하는 것)함
6) 변수 호이스팅
변수 선언은 소스코드가 한 줄씩 차례대로 실행되는 시점인 런타임이 아니라 그 이전의 준비 단계에서 미리 실행된다. 따라서 아래의 console.log 결과 값은 서로 다른 값을 출력한다. 이는 자바스크립트 고유의 특징이다.
console.log(score); // 출력값 : undefined
var score; // 1) 변수 선언 - 런타임 이전에 미리 실행
score = 80; // 2) 값의 할당 - 런타임에 실행
console.log(score); // 출력값 : 80
7) 매니지드 언어(managed language)
프로그래밍 언어는 메모리 관리 방식에 따라 언매니지드 언어와 매니지드 언어로 구분된다. 언매니지드 언어는 메모리 제어를 개발자가 주도가 가능하여 개발자 역향에 따라 최적의 성능 확보가 가능하지만 반대로 치명적 오류를 발생시킬 위험이 존재한다. 예로 C 언어가 있다.
매니지드 언어에는 자바스크립트 언어가 해당되는데, 메모리 관리 기능을 언어 차원에서 관리하며 더 이상 사용하지 않는 메모리는 가비지 콜렉터에 의해 해제(값을 재할당(변수에 저장된 값을 변경)했을 때 이전 값에 새로운 값을 덮어씌우는 것이 아니라 두 값이 나란히 존재, 이후 메모리에서 알아서 자동으로 이전 값을 해제시킴 - 가비지 콜렉터 기능)된다. 이로써 생산성 확보의 장점을 가지지만 반대로 성능 면에서의 손실은 감수해야 하는 단점이 있다.
참고 : 도서 <모던 자바스크립트 Deep Dive>
'TIL' 카테고리의 다른 글
<자바스크립트 Javascript> 자주 사용되는 용어 알기 (0) | 2021.12.13 |
---|---|
<CSS> 페이지 전환 효과 (0) | 2021.12.12 |
<자바스크립트 JavaScript> 배경과 역사 (0) | 2021.12.10 |
<CSS> Flexbox 레이아웃 (2) + Flexbox Froggy 풀이 (0) | 2021.12.09 |
<CSS> Flexbox 레이아웃 (1) (0) | 2021.12.08 |