하 시발.. 티스토리 서버 터져서 적어놓은거 다 날아가서 다시 쓴다..ㅡㅡ
# 같은 메모리 값이라도 다른 결과가 나올 수 있다?
let binaryData = 0b01000001;
console.log(Number(binaryData)); //65
console.log(String.fromCharCode(binaryData)); //A
위 코드를 보자. binaryData변수값에 할당한 저 괴상한 숫자는 2진법으로 저장된 65라는 숫자다.
하지만 콘솔로 각각 찍어본 결과는 서로 다른 값이다.
https://jacobowl.tistory.com/134
메모리에 저장되는 기본 구조.
# 시작하면서 2진법에대해서 되돌아보자. 중학생때 배웠던 2진법을 기억하고 있을것이다. 즉 0,1로 숫자를 표현하는 방법인데 예를들어 0은 10진법 수로 0이다. 1은 10진법수로 1, 10은 10진법 수로 2
jacobowl.tistory.com
이 포스팅에서 메모리에서는 2진법으로 데이터가 저장된다고 하였다.
물론 위코드에서 binaryData에 할당된 값은 숫자인데 그냥 단순히 메모리에 저장되는 2진법 데이터의 형태를
나타내기 위해서 저렇게 적었다.
암튼 01000001이라는 2진법 수는 10진법 수인 65가 될 수도 있고
스트링인 A가 될 수도 있다는 말이다.
그렇다면 자바스크립트는 메모리에있는 데이터를 참조할때 이 01000001이라는 값을 어떻게 문자인지 숫자인지
구분해서 가져오는 것일까?
# 숫자타입의 데이터 저장 방법
위 코드에서 자바스크립트는 binaryData라는 변수를 선언하고 값을 할당할때
숫자타입임을 인식하고 메모리의 8바이트 공간을 확보한다.
그리고 값을 저런식으로 저장을 한다.
(물론 저 그림이 정확한건 아니란다. 배정밀도 64비트 부동소수점방식으로 저장한다나 뭐래나..)
암튼 기본 구조 설명을 위해 단순히 2진법 숫자데이터가 저렇게 8바이트의 공간을 확보하고
데이터를 저장한다고 생각합시다.
# 숫자타입의 데이터 참조 방법
그럼 데이터를 참조할때는 어떻게 가져올까?
위 그림처럼 숫자타입이란걸 인식하고 메모리주소가 가르키는 선두셀에 접근한다.
이 선두셀에서부터 8바이트의 크기까지를 읽고 데이터를 가져오는것이다.
만약 메모리공간의 크기를 모른채 메모리에 접근하면 스트링값 A를 가져올 수도 있게된다.
결과적으로 메모리공간의 크기(위 그림에서는 8바이트라 숫자형데이터)를 알아야 정확한 값을 가져올 수 있는것이다.
이 메모리주소 데이터 타입, 스코프등은 심벌테이블이라는 자료구조로 관리한다고하는데 이건 아직 모르는분야임..
'javaScript > jsDeepDive' 카테고리의 다른 글
논리 곱, 논리 합 연산자의 작동방식 (0) | 2023.05.04 |
---|---|
전위연산자 & 후위연산자 (+엘리스 토끼굴에 빠진 var) (0) | 2023.05.04 |
값(value), 리터럴(literal), 표현식(expression), 문(statement) (2) | 2023.03.23 |
변수 호이스팅, 그리고 초기화 initialize, Temporal Dead Zone (1) | 2023.03.23 |
변수와 메모리의 관계 (0) | 2023.03.21 |