JavaScript에서 ArrayBuffer 객체는 고정 길이(fixed-length)의 바이너리 데이터 버퍼를 나타냅니다. 이 객체가 제공하는 byteLength 속성은 해당 버퍼의 크기를 나타내는 부호 없는 32비트(unsigned) 정수를 반환합니다.
즉, ArrayBuffer를 생성할 때 지정한 바이트 단위의 길이를 코드 실행 중에 확인하고 싶다면 byteLength 속성을 사용하면 됩니다.
구문(Syntax)
array.byteLength
매개변수는 없으며, 호출 즉시 버퍼의 바이트 길이를 숫자로 반환합니다.
예제 1: 기본 사용법
8바이트 크기의 ArrayBuffer를 생성한 후 byteLength 속성으로 크기를 확인해 보겠습니다.
<html>
<head>
<title>JavaScript Example</title>
</head>
<body>
<script type="text/javascript">
var arrayBuffer = new ArrayBuffer(8);
var result = arrayBuffer.byteLength;
document.write("array buffer의 길이는: " + result);
</script>
</body>
</html>출력 결과
array buffer의 길이는: 8
생성자에 전달한 8이 그대로 byteLength로 반환되는 것을 확인할 수 있습니다.
예제 2: 문자열을 전달한 경우
ArrayBuffer 생성자에는 숫자 형태의 크기 값만 의미 있게 전달됩니다. 만약 문자열처럼 숫자로 변환할 수 없는 값을 넣으면 내부적으로 NaN으로 처리되어, 길이가 0인 빈 버퍼가 생성됩니다. 따라서 byteLength는 0을 반환합니다.
<html>
<head>
<title>JavaScript Example</title>
</head>
<body>
<script type="text/javascript">
var obj = new ArrayBuffer("Hi welcome to Tutorialspoint");
var byteLength = obj.byteLength;
document.write(byteLength);
</script>
</body>
</html>출력 결과
0
생성 시 발생할 수 있는 오류
ArrayBuffer를 생성할 때는 다음 세 가지 조건을 반드시 지켜야 합니다. 이를 위반하면 에러가 발생합니다.
- 크기 값으로 음수를 사용할 수 없습니다.
- 복소수 같은 유효하지 않은 값은 애초에 문법 오류를 일으킵니다.
- 크기는 253을 초과할 수 없습니다.
각 경우를 예제와 함께 살펴보겠습니다.
1) 크기가 253보다 큰 경우
<html> <head> <title>JavaScript Example</title> </head> <body> <script type="text/javascript"> var obj = new ArrayBuffer(9007199254740995); var byteLength = obj.byteLength; document.write(byteLength); </script> </body> </html>
출력 결과
Error: Array buffer allocation failed
허용 범위를 벗어난 크기 때문에 버퍼 할당 자체가 실패합니다.
2) 복소수를 크기로 지정한 경우
<html> <head> <title>JavaScript Example</title> </head> <body> <script type="text/javascript"> var obj = new ArrayBuffer(2+3i); var byteLength = obj.byteLength; console.log(byteLength); </script> </body> </html>
출력 결과
Error: Invalid or unexpected token
복소수는 JavaScript 문법에서 유효하지 않은 토큰이므로, 코드가 실행되기도 전에 구문(Syntax) 오류가 발생합니다.
3) 음수를 크기로 지정한 경우
<html> <head> <title>JavaScript Example</title> </head> <body> <script type="text/javascript"> var obj = new ArrayBuffer(-72); var byteLength = obj.byteLength; console.log(byteLength); </script> </body> </html>
출력 결과
Error: Invalid array buffer length
버퍼의 길이는 항상 0 이상이어야 하므로 음수 값은 허용되지 않습니다.
정리
byteLength 속성은 ArrayBuffer의 실제 바이트 크기를 손쉽게 확인할 수 있는 유용한 도구입니다. 다만 생성자에 전달하는 크기 값은 0 이상, 253 이하의 정수여야 한다는 점을 기억하세요. 또한 최신 개발 환경에서는 화면에 직접 출력하는 document.write 대신 console.log를 사용해 결과를 확인하는 것이 권장됩니다.