Java에서 배열을 다루는 데 있어 System.arraycopy()와 Arrays.copyOf()는 자주 사용되는 두 가지 메서드입니다. 이 두 메서드는 배열의 복사본을 만드는 데 사용되지만, 사용 방법과 내부 작동 방식에는 몇 가지 차이점이 있습니다. 이 글에서는 이러한 차이점을 자세히 살펴보고, 언제 각각의 메서드를 사용하는 것이 적절한지에 대해 알아보겠습니다.
System.arraycopy()
System.arraycopy() 메서드는 한 배열의 특정 위치에서 시작하여 다른 배열의 특정 위치로 요소를 복사하는 데 사용됩니다. 이 메서드는 java.lang.System 클래스의 정적 메서드로, 다섯 개의 매개변수를 받습니다.
System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length);
- src: 원본 배열
- srcPos: 원본 배열에서 복사를 시작할 위치
- dest: 대상 배열
- destPos: 대상 배열에 복사를 시작할 위치
- length: 복사할 요소의 수
이 메서드의 장점은 배열의 일부만을 빠르게 복사할 수 있다는 것입니다. 예를 들어, 다음과 같이 사용할 수 있습니다.
예제 코드 :
public class ArrayCopyExample {
public static void main(String[] args) {
// 원본 배열 초기화
int[] sourceArray = {1, 2, 3, 4, 5, 6, 7};
// 대상 배열 초기화
int[] destinationArray = {10, 20, 30, 40, 50, 60, 70, 80};
// sourceArray의 2번 인덱스부터 3개 요소를 destinationArray의 1번 인덱스로 복사
System.arraycopy(sourceArray, 2, destinationArray, 1, 3);
// 복사 후 대상 배열 출력
System.out.println("복사 후 대상 배열:");
for (int value : destinationArray) {
System.out.print(value + " ");
}
}
}
출력 결과:
복사 후 대상 배열:
10 3 4 5 50 60 70 80
Arrays.copyOf()
반면, Arrays.copyOf() 메서드는 원본 배열의 처음부터 지정된 길이만큼의 요소를 새 배열로 복사하여 반환합니다. 이 메서드는 java.util.Arrays 클래스의 메서드로, 두 개의 매개변수를 받습니다.
T[] copyOf(T[] original, int newLength);
- original: 원본 배열
- newLength: 새 배열의 길이
이 메서드는 내부적으로 System.arraycopy()를 사용하여 배열을 복사하지만, 사용자가 직접 대상 배열을 생성할 필요가 없으며, 새 배열의 길이만 지정하면 됩니다. 앞에서 System.arraycopy()함수에서 설명했던 예제코드와 같은 결과 값이 출력되도록 코드를 아래와 같이 작성해 볼수 있습니다.
예제 코드 :
public class ArrayCopyOfExample {
public static void main(String[] args) {
// 원본 배열 초기화
int[] sourceArray = {3, 4, 5, 6, 7};
// 대상 배열 초기화
int[] destinationArray = {10, 20, 30, 40, 50, 60, 70, 80};
// sourceArray의 처음부터 3개 요소를 복사하여 새 배열 생성
int[] copiedPart = Arrays.copyOf(sourceArray, 3); // 3, 4, 5을 복사합니다.
// copiedPart의 요소를 destinationArray의 1번 인덱스부터 복사
for (int i = 0; i < copiedPart.length; i++) {
destinationArray[1 + i] = copiedPart[i];
}
// 복사 후 대상 배열 출력
System.out.println("복사 후 대상 배열:");
for (int value : destinationArray) {
System.out.print(value + " ");
}
}
}
출력 결과:
복사 후 대상 배열:
10 3 4 5 50 60 70 80
차이점
용도: System.arraycopy()는 배열의 특정 부분을 다른 배열의 특정 위치로 복사할 때 유용합니다. 반면, Arrays.copyOf()는 원본 배열의 처음부터 주어진 길이만큼을 새 배열로 만들고 싶을 때 사용됩니다.
사용 편의성: Arrays.copyOf()는 새 배열을 자동으로 생성하고, 대상 배열을 직접 관리할 필요가 없기 때문에 더 편리할 수 있습니다. System.arraycopy()를 사용할 때는 사용자가 대상 배열을 미리 생성해야 합니다.
유연성: System.arraycopy()는 원본 및 대상 배열 내의 시작 위치를 지정할 수 있으므로, 더 세밀한 배열 복사 작업이 가능합니다.
결론
System.arraycopy()와 Arrays.copyOf()는 각각의 사용 사례에 맞게 선택하여 사용하는 것이 좋습니다. 전체 배열이 아닌 일부를 다른 배열로 복사하려면 System.arraycopy()가, 원본 배열의 특정 길이만큼을 새 배열로 쉽게 만들고 싶을 때는 Arrays.copyOf()가 더 적합할 수 있습니다. 따라서, 상황에 따라 두 메서드 중 어느 것을 사용할지 결정하면 됩니다.