Java에서 배열 복사하기: System.arraycopy() vs Arrays.copyOf()

Java에서 배열을 다루는 데 있어 System.arraycopy()와 Arrays.copyOf()는 자주 사용되는 두 가지 메서드입니다. 이 두 메서드는 배열의 복사본을 만드는 데 사용되지만, 사용 방법과 내부 작동 방식에는 몇 가지 차이점이 있습니다. 이 글에서는 이러한 차이점을 자세히 살펴보고, 언제 각각의 메서드를 사용하는 것이 적절한지에 대해 알아보겠습니다.


Java에서 배열 복사하기: System.arraycopy() vs 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()가 더 적합할 수 있습니다. 따라서, 상황에 따라 두 메서드 중 어느 것을 사용할지 결정하면 됩니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다