var a; // 변수 a 선언
a = 'abc'; // 변수 a에 데이터 할당
var a = 'abc'; // 변수 선언과 할당을 한 문장으로 표현
주소 | ... | 1002 | 1003 | 1004 | 1005 | 1006 | .... |
데이터 | 이름 : a 값 : @5004 |
||||||
주소 | ... | 5002 | 5003 | 5004 | 5005 | 5006 | .... |
데이터 | 'abc' |
- 변수 영역에서 빈 공간(@1003)을 확보한다.
- 확봔 공간의 식별자를 a로 지정
- 데이터 영역의 빈 공간(@5004)에 문자열 'abc'를 저장한다.
- 변수 영역에서 a라는 식별자를 검색한다.(@1003)
- 앞서 저장한 문자열의 주소(@5004)를 @1003의 공간에 대입한다.
왜 정적 언어 타입처럼 변수에 값을 직접 대입하지 않는 것일까?????
-> 데이터 변환을 자유롭게 할 수 있게 함과 동시에 메모리를 더욱 효율적으로 관리하기 위한 고민의 결과
자바스크립트는 64비트(8바이트)의 공간을 확보 -> 문자열은 특별히 정해진 구격이 없다.
한 글자마다 영어는 1byte 한글은 2byte 등으로 각각 필요한 메모리 용량이 가변적, 전체 글자 수 역시 가변적
* 만약 미리 확보한 공간 내에서만 데이터 변환을 할 수 있다면 데이터를 다시 저장하기 위해서는 '확보된 공간을 변환된 데이터 크기에 맞게 늘리는 작업'이 선행되야한다.
해당 공간이 메모리 상의 가장 마지막에 있었다면 뒤쪽으로 늘리기만 하면 되니까 어렵지 않겠지만
중간에 있는 데이터를 늘려야 하는 상황이라면????
해당 공간보다 뒤에 저장된 데이터들을 전부 뒤로 옮기고, 이동시킨 주소를 각 식별자에 다시 연결하는 작업을 해야 한다.
-> 컴퓨터가 처리해야 할 연산 증가
결론 : 효율적으로 문자열 데이터의 변환을 처리하려면 변수와 데이터를 별도의 공간에 나누어 저장하는 것이 최적
'JavaScript' 카테고리의 다른 글
식별자와 변수 (0) | 2021.12.17 |
---|---|
메모리와 데이터 (0) | 2021.12.17 |
배열의 요소 추가, 삭제 방법 (0) | 2021.07.22 |
자바스크립트 chapter 2 (0) | 2021.07.21 |
자바스크립트 chapter 1 (0) | 2021.07.20 |