배열은 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것을 의미한다. 따라서 많은 양의 데이터를 저장할 때 용이하게 사용할 수 있다.
int[] score;
- int형 배열 참조변수 score를 선언한다.score = new int[]5
- 연산자 new
에 의해서 메모리의 빈 공간에 5개의 int형 데이터를 저장할 수 있는 공간이 마련된다.score
에 저장된다.배열은 초기화 할때 그 크기가 정해진다.
int[] numArr = new int[5]
한번 생성되면 컴파일 수 실행되는 동안은 그 크기를 바꿀 수 없다.
배열은 연속적인 메모리 공간을 차지하기 때문에
배열의 크기를 늘려야한다면 원래의 공간 뒤에 연속적인 메모리 공간이 추가적으로 존재한다는 보장이 없다.
따라서 배열의 크기가 부족하다면 필요한 만큼의 크기의 배열을 새롭게 만든다. 그리고 새로 만든 배열에 기존의 값들을 복사한다.
위에서 말했듯이 배열에 저장할 더 많은 공간이 필요하다면 보다 큰 배열을 만들고 이전 값들을 복사해야한다고 했다. 간단하고 빠르게 배열을 복사 할 수 있는 메서드들이 있다.
메서드를 사용하지 않고 for문으로 배열을 복사 할 수 있지만 배열의 요소 하나하나에 접근해야 하기 때문에 효율이 좋지 않다.
System클래스의 arraycopy()
메서드를 사용한다면 값들을 한번에 복사하기 때문에 더욱 빠르고 간단하게 복사 할 수 있다.
System.arraycopy(num, 0, newNunm, 0, num.lenght);
num[0]
에서 newNum[0]
으로 num.lenght
개의 데이터를 복사한다.
이때 복사하려는 배열의 위치가 잘못되면 ArrayIndexOutOfBoundsException
이 발생할 수 있기 때문에 주의해야한다.