2. 배열


javalogo

배열의 정의

배열(array)은 같은 타입의 원소를 집단적으로 저장할 수 있는 기본적인 데이터 구조이다. Java에서 배열은 기본 타입이 아니고 변수의 집합으로 동작한다. 따라서 변수에 해당되는 규칙의 대부분이 배열에도 적용된다.


배열의 사용

배열에 있는 각 원소들은 배열 인덱스 연산자 []로 접근할 수 있다. []연산자는 배열을 인덱스한다고 하는데 이는 이 연산자를 통해 배열의 어떤 원소에 접근할 것인가를 명세한다는 것이다.

Java에서의 배열 인덱스는 다른 프로그래밍 언어와 같이 항상 0에서 시작한다. 따라서 3개의 원소를 저장하고 있는 배열 a[]a[0], a[1], a[2]로 접근된다. 배열 a[]에 저장할 수 있는 원소의 수는 a.length로 알 수 있다. 여기서 length는 메소드가 아닌 괄호가 없는 시스템이 내부적으로 정의해 놓은 배열의 데이터 필드 이다.

int [] array1;

배열은 변소의 범주에 속하므로 위와 같이 배열 array1[]int 타입으로 선언할 경우 실제로 메모리는 할당되지 않고 단지 배열에 대한 이름(참조)이라는 것만 선언된다. 이 시점에서 참조변수 array1null값을 갖는다.

array1 = new int[100];

위 코드의 경우 array1[]이 100개의 int 값을 포함할 수 있게 new를 사용하여 메모리를 할당받은 것이다.

배열을 선언할 때 대괄호[]는 배열 이름 뒤에 올 수도 있고 앞에 올 수도 있다.

또한 배열을 처음 선언할 때 직접 초기값을 지정할 수도 있다. 아래 예에서는 4개의 int값, {3,4,10,6}을 초기값으로 갖는 배열을 선언하고 참조 변수 array3이 참조하도록 되어 있다.

int [] array3 = {3,4,10,6};

참조 타입의 배열을 생성하면 각 객체는 초기 값으로 null을 갖게 된다. 따라서 각각의 참조에 객체를 만들어 연결해 주어야 한다.

예를 들어 5개의 Point 객체를 저장할 수 있는 배열을 만들려면 다음과 같이 한다.

Point [] arrayOfPoints;
arrayOfPoints = new Point[5];
for (int i = 0; i < arrayOfPoints.length; i++)
    arrayOfPoints[i] = new Point();

배열은 참조타입이기 때문에 =연산자로 배열을 복사할 수 없다. 아래 예와 같이 a, b를 배열로 선언하고 지정 연산자를 수행하면 a는 b가 참조하는 배열 객체를 참조하게 된다. 이렇게 되면 b[0]이 나타내는 것이 a[0]이 나타내는 것이 같다.

따라서 b[0]을 변경하게 되면 a[0]도 변경된다. 만약 배열 a[]를 배열 b[]와 똑같은 복사본으로 만들려면, 메소드 clone()을 이용하면 된다.

배열이 여러 개의 인덱스로 접근되는 배열을 다차원 배열(multidimensional array)이라 한다. 다차원 배열을 선언할 때에는 각 인덱스의 크기들을 다음과 같이 대괄호로 명세하면 된다.

int [][] a = new int[2][3]

참고 문서

  • 이석호. (2004). 자료 구조와 JAVA. 정익사.





© 2019. by RaP0d

Powered by aiden