이번에는 A tour of V8: object representation을 번역하면서 공부하려 한다. V8이 메모리에서 객체를 나타내는 방법을 이해하는 것에 도움이 되는 내용이다.
<aside> 💡 메모리 블록과 맵(”a”, ”b”) // 정의할 때, 저장된 속성(key)을 포함 ****: JS객체는 메모리 블록에 속성들을 저장한다. 이때, 각 속성의 이름과 값을 모두 저장하지 않고, 실제 속성 값과 이 속성들의 구조를 설명하는 'Map'을 참조하는 포인터로 구성 ⇒ 동일한 구조를 가진 객체들이 생길 경우, 맵을 공유함으로써 메모리를 절약
</aside>
<aside> 💡 오버플로 배열 (Extra Properties) // 동적으로 추가된 속성들을 저장하는 공간 : 맵에 정의되지 않은 속성, 즉 동적으로 추가된 속성들은 오버플로 배열에 저장 ⇒ 객체 구조가 변경되는 것을 최소화하고 성능 저하 최소화
</aside>
<aside> 💡 번호가 매겨진 속성들(Elements) // 순차적인 배열 (키가 숫자인) 요소가 저장되는 공간 : 배열과 같이 숫자 인덱스를 사용하는 속성들은 별도의 연속된 메모리 공간에 저장 ⇒ 배열의 인덱스 접근을 빠르게 만들고, 속성들을 순차적으로 처리.
</aside>
이 다이어그램은 가장 일반적이고 최적화된 표현만을 다룬다. 다양한 사용 사례를 처리하기 위한 몇 가지 표현이 있다.
V8은 힘든 일을 맡고 있다. 자바스크립트 표준은 개발자들이 매우 유연한 방식으로 객체를 정의할 수 있게 만들었기 때문에 이를 모두 처리할 수 있는 효율적으로 처리할 수 있는 일관된 방법을 찾기 어렵다.
객체는 기본적으로 속성들의 집합이다. (기본적으로 키-값) 다음 두 가지 표현식을 사용하여 속성에 접근할 수 있다.
obj.prop
obj["prop"]