ArrayBuffer.prototype.transfer()
Baseline
2024
Newly available
Since โจMarch 2024โฉ, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.
ArrayBuffer
์ธ์คํด์ค์ transfer()
๋ฉ์๋๋ ์ด ๋ฒํผ์ ๋์ผํ ๋ฐ์ดํธ ๋ด์ฉ์ ๊ฐ์ง ์ ArrayBuffer
๋ฅผ ์์ฑํ ๋ค์ ์ด ๋ฒํผ๋ฅผ ๋ถ๋ฆฌํฉ๋๋ค.
๊ตฌ๋ฌธ
transfer()
transfer(newByteLength)
๋งค๊ฐ๋ณ์
newByteLength
Optional-
์
ArrayBuffer
์byteLength
์ ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ ์ดArrayBuffer
์byteLength
์ ๋๋ค.newByteLength
๊ฐ ์ดArrayBuffer
์byteLength
๋ณด๋ค ์์ผ๋ฉด ํด๋น ๋ฒํผ์ ๋ด์ง ๋ชปํด "๋์น๋" ๋ฐ์ดํธ๋ ์ญ์ ๋ฉ๋๋ค.newByteLength
๊ฐ ์ดArrayBuffer
์byteLength
๋ณด๋ค ํฌ๋ค๋ฉด ๋จ๋ ๋ฐ์ดํธ๋ 0์ผ๋ก ์ฑ์์ง๋๋ค.- ์ด
ArrayBuffer
์ ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ ์ ์๋ ๊ฒฝ์ฐnewByteLength
๋ ํด๋นmaxByteLength
๋ณด๋ค ํฌ์ง ์์์ผ ํฉ๋๋ค.
๋ฐํ ๊ฐ
์๋ก์ด ArrayBuffer
๊ฐ์ฒด์
๋๋ค. ํด๋น ๊ฐ์ฒด์ ๋ด์ฉ์ ์ด ArrayBuffer
์ ๋ด์ฉ์ผ๋ก ์ด๊ธฐํ๋๋ฉฐ, ์ฌ๋ถ์ ๋ฐ์ดํธ๊ฐ ์์ผ๋ฉด 0์ผ๋ก ์ฑ์์ง๋๋ค. ์๋ก์ด ArrayBuffer
๋ ์ด ArrayBuffer
๊ฐ ํฌ๊ธฐ ์กฐ์ ์ด ๊ฐ๋ฅํ ๊ฒฝ์ฐ์๋ง ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ ์ ์์ผ๋ฉฐ, ์ด ๊ฒฝ์ฐ ์๋ก์ด ๊ฐ์ฒด์ maxByteLength
๋ ์ด ArrayBuffer
์ ๊ฒ๊ณผ ๋์ผํฉ๋๋ค. ์๋์ ArrayBuffer
๋ ๋ถ๋ฆฌ๋ฉ๋๋ค.
์์ธ
RangeError
-
์ด
ArrayBuffer
๊ฐ ํฌ๊ธฐ ์กฐ์ ์ด ๊ฐ๋ฅํ๊ณnewByteLength
๊ฐ ์ดArrayBuffer
์maxByteLength
๋ณด๋ค ํฌ๋ค๋ฉด ๋ฐ์ํฉ๋๋ค. TypeError
-
ArrayBuffer
๊ฐ ์ด๋ฏธ ๋ถ๋ฆฌ๋ ๊ฒฝ์ฐ ๋ฐ์ํฉ๋๋ค.
์ค๋ช
transfer()
๋ฉ์๋๋ ๊ตฌ์กฐํ๋ ๋ณต์ ์๊ณ ๋ฆฌ์ฆ๊ณผ ๋์ผํ ์ฐ์ฐ์ ์ํํฉ๋๋ค. ์ด ArrayBuffer
์ ๋ฐ์ดํธ๋ฅผ ์ ArrayBuffer
๊ฐ์ฒด์ ๋ณต์ฌํ ๋ค์ ์ด ArrayBuffer
๊ฐ์ฒด๋ฅผ ๋ถ๋ฆฌํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ์ ์กํ๋ ๋ฐฐ์ด ๋ฒํผ๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
transfer()
๋ ์ด ArrayBuffer
์ ํฌ๊ธฐ ์กฐ์ ๊ฐ๋ฅ ์ฌ๋ถ ๊ฐ์ ์ ์งํฉ๋๋ค. ์ ArrayBuffer
์ ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ ์ ์๊ฒ ํ๋ ค๋ฉด transferToFixedLength()
๋ฅผ ๋์ ์ฌ์ฉํ์๊ธฐ ๋ฐ๋๋๋ค. ๊ณ ์ ๊ธธ์ด ๋ฒํผ๋ฅผ ํฌ๊ธฐ ์กฐ์ ์ด ๊ฐ๋ฅํ๋๋ก ๋ง๋๋ ๋ฒํผ๋ฅผ ์ ์กํ๋ ๋ฐฉ๋ฒ์ ์์ต๋๋ค.
transfer()
๋ ๊ตฌํ์์ ์ด ๋ฉ์๋๋ฅผ ์ ๋ก ์นดํผ ์ด๋ ๋๋ realloc
์ผ๋ก ๊ตฌํํ ์ ์์ผ๋ฏ๋ก ๋ฐ์ดํฐ์ ์ค์ ๋ณต์ฌ๋ณธ์ด ์์ด๋ ๋๋ฏ๋ก ๋งค์ฐ ํจ์จ์ ์
๋๋ค.
์์
ArrayBuffer ์ ์กํ๊ธฐ
// ArrayBuffer๋ฅผ ์์ฑํ๊ณ ๋ช ๋ฐ์ดํธ๋ฅผ ๊ธฐ๋กํฉ๋๋ค
const buffer = new ArrayBuffer(8);
const view = new Uint8Array(buffer);
view[1] = 2;
view[7] = 4;
// ๋ฒํผ๋ฅผ ๊ฐ์ ํฌ๊ธฐ๋ก ๋ณต์ฌํฉ๋๋ค
const buffer2 = buffer.transfer();
console.log(buffer.detached); // true
console.log(buffer2.byteLength); // 8
const view2 = new Uint8Array(buffer2);
console.log(view2[1]); // 2
console.log(view2[7]); // 4
// ๋ฒํผ๋ฅผ ๋ ์์ ํฌ๊ธฐ๋ก ๋ณต์ฌํฉ๋๋ค
const buffer3 = buffer2.transfer(4);
console.log(buffer3.byteLength); // 4
const view3 = new Uint8Array(buffer3);
console.log(view3[1]); // 2
console.log(view3[7]); // undefined
// ๋ฒํผ๋ฅผ ๋ ํฐ ํฌ๊ธฐ๋ก ๋ณต์ฌํฉ๋๋ค
const buffer4 = buffer3.transfer(8);
console.log(buffer4.byteLength); // 8
const view4 = new Uint8Array(buffer4);
console.log(view4[1]); // 2
console.log(view4[7]); // 0
// ์ด๋ฏธ ๋ถ๋ฆฌ๋จ, TypeError ๋ฐ์
buffer.transfer(); // TypeError: Cannot perform ArrayBuffer.prototype.transfer on a detached ArrayBuffer
ํฌ๊ธฐ ์กฐ์ ์ด ๊ฐ๋ฅํ ArrayBuffer ์ ์กํ๊ธฐ
const buffer = new ArrayBuffer(8, { maxByteLength: 16 });
const view = new Uint8Array(buffer);
view[1] = 2;
view[7] = 4;
// ๋ฒํผ๋ฅผ ๋ ์์ ํฌ๊ธฐ๋ก ๋ณต์ฌ
const buffer2 = buffer.transfer(4);
console.log(buffer2.byteLength); // 4
console.log(buffer2.maxByteLength); // 16
const view2 = new Uint8Array(buffer2);
console.log(view2[1]); // 2
console.log(view2[7]); // undefined
buffer2.resize(8);
console.log(view2[7]); // 0
// maxByteLength ๋ฒ์ ๋ด์์ ๋ ํฐ ํฌ๊ธฐ๋ก ๋ฒํผ ๋ณต์ฌ
const buffer3 = buffer2.transfer(12);
console.log(buffer3.byteLength); // 12
// maxByteLength ๋ฒ์ ๋ณด๋ค ๋ ํฐ ํฌ๊ธฐ๋ก ๋ฒํผ ๋ณต์ฌ
buffer3.transfer(20); // RangeError: Invalid array buffer length
๋ช ์ธ์
Specification |
---|
ECMAScriptยฎ 2026 Language Specification # sec-arraybuffer.prototype.transfer |
๋ธ๋ผ์ฐ์ ํธํ์ฑ
Loadingโฆ