본문 바로가기

시즌1/Java Tips

[Java Tips] array 를 다른 array로 복사하는 법


얼마전 다른 개발자가 작성한 코드를 보다가 array 복사를 for loop 문을 이용해서 하는 것을 보았습니다. 물론, 별 생각 없이 써도 무방한 코드입니다.


	int[] src = {1, 2, 3, 4, 5};
	int[] dest = new int[src.length];
	
	for(int i = 0 ; i < src.length ; i++){
		dest[i] = src[i];
	}

하지만, 복사해야 하는 array의 사이즈가 1000, 10000으로 커진다면 어떻게 될까요? 과연 성능이 잘 나올까요?

이런 경우, 사용할 수 있는 간단한 API가

java.lang.System.arraycopy(Object src, int src_position, Object dst, int dst_position, int length);

입니다.

System.arraycopy의 경우, jni로 구현되어 있어, 메모리를 직접 접근하여 복사하므로, 성능 면에서 월등합니다.

샘플 코드

	int[] src = {1, 2, 3, 4, 5};
	int[] dest = new int[src.length];
	
	System.arraycopy(src, 0, dest, 0, src.length);


단, object array의 경우, 그 refernce가 복사되므로, 복사된 array는 기존의 object를 그대로 가리키고 있습니다. 만약, 새로운 object로 복사하여야 하는 경우는, for loop문을 이용하여,개별 object를 복사하여야 합니다.