Java

[Java기초] 배열- 길이 변경하기

김도유 2022. 9. 2. 00:53

자바에서는 '배열이름.length'를 통해 배열의 길이를 알 수 있다.

 

배열은 한번 생성시 길이를 변경할 수 없다.

하지만, 배열에 저장 공간이 부족한 경우에는 어떻게 할까?

 

=> 1. 더 큰 저장공간의 배열 생성 -> 2. 기존 배열의 저장 값들을 새 배열에 복사

 

1. for문으로 배열 복사

//for문으로 배열 복사
int[] score = new int[5];

int[] tmp = new int[score.lenght*2] //기존 배열보다 길이가 2배인 배열 생성

for(int i = 0; score.length; i++) 
	tmp[i] = score[i]; //score[i]값을 tmp[i]에 저장(복사)

score = tmp; //참조변수 score에 참조변수 tmp의 값을 저장. score은 배열 tmp를 가르키게 됨

참조변수 score와 tmp는 같은 배열을 가리키게 되는 것이다.

즉, 배열 score와 배열 tmp는 이름만 다를 뿐 동일한 배열이다.그 전 score가 가리키던 배열은 더 이상 사용불가.

왜냐하면, 배열은 참조변수를 통해서만 접근하기에 참조변수가 없는 배열은 사용할 수 없다.

 

2. System.arraycopy()로 배열 복사

//System.arraycopy()로 배열복사

System.arraycopy(num, 0, newNum, 0, num.length);
//num[0]에서 newNum[0]으로 num.length개의 데이터 복사

for문 대신 System.arraycopy()를 이용하면 간단하고 빠르게 배열을 복사 가능하다.

차이점 : for문- 배열 요소 하나하나에 접근해서 복사

              arraycopy()- 지정된 범위 값들을 한 번에 통째로 복사