자바스크립트에서 TypedArray 객체의 set() 메서드는 다른 배열의 내용을 현재 타입 배열로 복사하는 기능을 수행합니다. 복사가 시작될 위치(인덱스)를 두 번째 인수로 지정할 수 있어, 원하는 지점부터 배열 데이터를 덮어쓸 수 있습니다.
set() 메서드란?
set() 메서드는 일반 배열 또는 다른 타입 배열(TypedArray)의 요소들을 현재 타입 배열 안으로 복사합니다. 이때 시작 인덱스를 함께 전달하면 해당 위치부터 순서대로 기존 값이 새로운 값으로 대체됩니다.
문법(Syntax)
typedArray.set(array, offset)
- array: 현재 타입 배열에 복사할 값을 담고 있는 배열 또는 타입 배열
- offset(선택 사항): 복사를 시작할 인덱스 위치. 생략하면 0부터 복사됩니다.
예제 코드
아래 예제에서는 Int32Array 두 개를 만들고, set() 메서드를 사용해 두 번째 배열의 내용을 첫 번째 배열의 3번 인덱스부터 복사합니다.
<html>
<head>
<title>JavaScript TypedArray set() Method</title>
</head>
<body>
<script type="text/javascript">
var typedArray1 = new Int32Array([11, 5, 13, 4, 15, 3, 17, 2, 19, 8]);
document.write("원본 타입 배열: " + typedArray1);
document.write("<br>");
var typedArray2 = new Int32Array([110, 215, 316, 916, 616, 117, 311]);
typedArray1.set(typedArray2, 3);
document.write("결과: " + typedArray1);
</script>
</body>
</html>실행 결과
원본 타입 배열: 11,5,13,4,15,3,17,2,19,8 결과: 11,5,13,110,215,316,916,616,117,311
동작 방식 설명
위 예제에서 typedArray1.set(typedArray2, 3)이 호출되면, typedArray2의 7개 요소(110, 215, 316, 916, 616, 117, 311)가 typedArray1의 3번 인덱스부터 차례대로 복사됩니다.
- 인덱스 0~2의 값(11, 5, 13)은 그대로 유지됩니다.
- 인덱스 3부터 9까지의 기존 값(4, 15, 3, 17, 2, 19, 8)은 새로운 값으로 덮어써집니다.
주의 사항
- 복사하려는 배열의 길이가 시작 오프셋부터 남은 공간보다 크면 RangeError가 발생합니다.
- set() 메서드는 원본 배열은 변경하지 않으며, 호출된 타입 배열만 수정합니다.
- 두 배열의 요소 타입이 달라도 자동으로 변환되어 복사되지만, 범위를 벗어나는 값은 의도와 다르게 저장될 수 있으므로 주의해야 합니다.