Programming Language/Java

[JAVA] 배열 복사 ( System.arraycopy() 메소드 )

BS Kwak 2020. 10. 10. 16:39

배열 복사

배열은 한 번 생성하면 크기를 변경할 수 없기 때문에 더 많은 저장 공간이 필요하면 더 큰 배열을 만들고 이전 배열의 항목을 복사해야함

 

1. for문 사용

int[] oldArr = {1,2,3}
int[] newArr = new int[5];

for(int i=0;i<oldArr.length;i++){
	newArr[i]=oldArr[i];
}

위의 경우, 1,2,3은 그대로 복사하고 4번째 5번째 항목의 경우 int형 배열의 초기값인 0이 된다. 

 

2. System.arraycopy() 메소드 사용

System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length);
// src : 원본배열 
// srcPos : 원본 배열에서 복사할 항목의 시작 인덱스
// dest : 새 배열
// destPos : 새 배열에서 붙여넣을 시작 인덱스
// length : 복사할 개수

예를 들면

System.arraycopy(arr1,0,arr2,0,arr1.length);
//arr1의 모든 항목을 arr2에 복사
String[] oldArr = {"kbs","sbs","mbc"};
String[] newArr = new String[5];

System.arraycopy(oldArr,0,newArr,0,oldArr.length);

String[] 배열의 초기값은 null이므로 newArr의 4번째 5번째 항목은 null이다. 

 

Shallow copy

참조타입 배열의 경우, 배열 복사가 되면 복사되는 값이 객체의 번지이므로 새 배열의 항목은 이전 배열의 항목이 참조하는 객체와 동일함 

 

Depp copy

객체도 별도로 생성