반응형
배열 복사, System.arraycopy()
기본적으로 배열은 한 번 생성한 이후에 크기를 변경할 수 없다. 따라서 기존 배열에서 데이터를 추가하기 위해서 기존 배열보다 저장 공간이 더 큰 새로운 배열을 만든 뒤, 새로운 배열로 데이터를 복사해야 한다.
for문을 사용하여 데이터를 복사할 수 있고, for문 말고도 System.arraycopy() 메서드를 사용하여 복사할 수 있다.
System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length);
src는 원본 배열, srcPos는 원본 배열에서 복사를 시작할 데이터의 인덱스 값이다.
dest는 새 배열이고, destPos는 새 배열에서 복사한 데이터를 붙여 넣을 시작 인덱스 값이다.
length는 복사할 데이터의 개수를 의미한다.
public class Main {
public static void main(String[] args) {
String[] oldArr = {"java", "c", "python"};
String[] newArr = new String[5];
System.arraycopy(oldArr, 0, newArr, 0, oldArr.length);
for (String str: newArr) {
System.out.println(str + ", ");
}
}
}
oldArr에 있는 데이터를 newArr에 복사한 경우이다.
복사되지 않은 항목(빈 곳)은 String[] 배열의 기본 초기 값인 null이 그대로 유지된다.
String 타입 배열은 참조 타입 배열이므로, System.arraycopy() 메서드를 사용하여 배열 복사 시 복사되는 값이 객체의 주소 값이 된다. 따라서 newArr[0]이 가리키는 객체와 oldArr[0]이 가리키는 객체는 동일하다. 이러한 복사를 얕은 복사(shallow copy)라고 한다.
반응형