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

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

Posts created 242

답글 남기기

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

Related Posts

Begin typing your search term above and press enter to search. Press ESC to cancel.

Back To Top

원활한 서비스 이용을 위한 안내

현재 광고 차단 프로그램이 켜져 있습니다. 이로 인해 사이트의 일부 기능이 제한될 수 있으니, 쾌적한 이용을 위해 광고 차단 해제 후 새로고침 부탁드립니다.