본문 바로가기

Java/기초

[Java] 배열(array)

1. 배열이란?

같은 타입의 여러 변수를 하나의 묶음으로 다루는 것

 

인덱스

범위는 0부터 '배열길이-1'까지

[참고] 배열의 길이는 int범위의 양의 정수(0도 포함)이어야 한다.

ex. int[] arr = new int [0];

 

배열이름.length

자바에서는 JVM이 모든 배열의 길이를 별도로 관리하며, '배열이름.length'를 통해서 배열의 길이에 대한 정보를 얻을 수 있다.

ex. int[] arr = new int[5]; // 길이가 5인 int배열 

     int tmp = arr.length;// arr.length의 값은 5이고 tmp에 5가 저장된다.

 

2. 배열의 복사

배열은 한번 생성하면 그 길이를 변경할 수 없기 때문에 더 많은 저장공간이 필요하다면 보다 큰 배열을 새로 만들고 이전 배열로부터 내용을 복사해야한다.

 

2.1 for문을 이용한 복사

1) for문을 이용해서 배열 arr의 모든 요소에 저장된 값을 하나씩 배열 tmp에 복사

for(int i=0; i <arr.length; i++)

tmp[i] = arr[i]

2) 참조변수 arr에 참조변수 tmp의 값을 저장한다. arr은 배열 tmp를 가리키게 된다.

arr = tmp;

 

결국 참조변수 arr과 tmp는 같은 배열을 가리키게 된다. 즉, 배열 arr과 배열 tmp는 이름만 다를 뿐 동일한 배열이다. 그리고 전에 arr이 가리키던 배열은 더 이상 사용할 수 없게 된다.

[참고] 배열은 참조변수를 통해서만 접근할 수 있기 때문에, 자신을 가리키는 참조변수가 없는 배열을 사용할 수 없다. 이렇게 쓸모없게 된 배열은 JVM의 가비지 컬렉터에 의해서 자동적으로 메모리에서 제거된다.

 

2.2 System.arraycopy()를 이용한 배열의 복사

1) System.arraycopy(num, 0, newNum, 0, num.length);

// num[0]에서 newNum[0]으로 num.length개의 데이터를 복사

이때 복사하려는 배열의 위치가 적절하지 못하여 복사하려는 내용보다 여유 공간이 적으면 에러(ArrayIndexOutofBoundsException)가 발생한다.