기존의 자바스크립트는 메모리에 접근을 허용
개발자가 지정한 메모리 크기만큼의 바이너리 데이터를 저장하는 객체
메모리를 확보해 바이너리 데이터를 0으로 저장해두는 역할만을 하며 실제 데이터 접근은 별도로 제공되는 ArrayBufferView 를 통해서만 가능하다
그런데 한가지 궁금점이 생긴다 왜 굳이 이렇게 데이터 저장과 접근 객체를 구분지어 관리를 할까?
데이터의 저장과 접근을 수행하는 객체를 분리한 이유는 크게
Efficiency ( 효율성 )와 Flexibility ( 유연성 ) 2가지이다
예를 들면
new ArrayBuffer(4) 로 생성한 공간은
00000000 00000000 0000000 0000000
으로 초기화되는데 이를
4byte 로 인식하면 0 ~ 4294967296 가지의 다양한 표현 방법이 있지만
1byte 로 인식하면 0 ~ 255, 0 ~ 255, 0 ~ 255, 0 ~ 255 로 4가지로 나눠 인식이 가능하다
즉 이미지와 같은 비트맵처리를 할 때는 더 적은 byte로 인식하면 효율적일 것이라 생각한다
또는 어떠한 구조에서는 접근할 때 인식되는 bit 수를 늘리는 것도 효율적일 수도 있다
즉 이러한 환경을 개발자가 직접 효율적 ( Efficiency ) 이고 유연 ( Flexibility ) 하게 조절하도록 한 것이다
ArrayBufferView 의 하나로 ArrayBuffer 에 저장된 바이너리 데이터를 원하는 형태로 인식
Ex )
// 4Byte의 ArrayBuffer(바이너리 데이터) 생성
const arrayBuffer = new ArrayBuffer(4);
// [00000000 00000000 00000000 00000000]
// Uint8Array: 1Byte(8bit)짜리 unsigned Int 요소 4개를 갖는 배열
const uint8Array = new Uint8Array(arrayBuffer);
// [0~255, 0~255, 0~255, 0~255]
// Uint16Array: 2Byte(16bit)짜리 unsigned Int 요소 2개를 갖는 배열
const uint16Array = new Uint16Array(arrayBuffer);
// [0~65536, 0~65536]
// UInt32Array: 4Byte(32bit)짜리 unsigned Int 요소 1개를 갖는 배열
const uint32Array = new Uint32Array(arrayBuffer);
// [0~4294967296]