배열 (Array)
1. 배열이란?
배열은 순서(index)와 그 순서에 대응하는 데이터들로 이루어진 자료구조이다. 배열에는 같은 타입의 데이터들이 순차적으로 저장된다.
변수를 선언하기 위해서는 변수의 타입과 이름을 지정해 주어야 한다. 또, 그 변수의 값을 사용하기 위해서는 변수의 이름을 통해서 값에 접근해야 한다. 그런데, 변수의 수가 많아져서 하나하나 선언을 하기가 힘들 때에 배열을 사용하면 매우 효과적이다. 처음 배열을 선언할 때에 배열의 이름과 크기만 지정해주면 된다. 그 이후에는 배열 내의 원소들의 순서에 맞춰서 배열 내의 각 공간에 접근하면 된다. 간단한 예시를 통해서 살펴보도록 하자.
10개의 변수 i1부터 i10에는 각각 고유한 정수 값이 저장되어 있다. 이들의 총합을 알아내기 위해서는 다음과 같이 해야 할 것이다.
i.e. int sum = i1 + i2 + i3 + i4 + i5 + i6 + i7 + i8 + i9 + i10;
그런데 만약 여기서 우리가 배열을 사용하게 된다면 반복문을 통해서 더 간단한 코드를 작성할 수 있게 된다. 배열을 사용하는 큰 이유 중 하나는 반복문의 활용에 있다. for 문을 사용하여 10개의 정수 값을 모두 더하는 코드는 다음과 같이 매우 간단히 작성된다.
i.e. (배열 i에 i1에서 i10에 해당되는 값 10개가 저장되어 있다고 하자.)
int sum = 0;
for (int n = 1; n <10; n++) {
sum += i[n];
}
2. 배열 선언 및 생성
자바에서 배열을 생성하는 방법은 C/C++와는 조금 다르다. 다음의 두 단계가 필요하다.
1) 배열에 대한 레퍼런스 변수 선언
2) 배열 생성
i.e. 5개의 정수 값을 저장하는 배열을 만드는 코드는 다음과 같다.
1) 배열에 대한 레퍼런스 변수 선언
int intArray[]; // int[] intArray; 이렇게 선언해도 문제 없다. 자바에서는 []를 변수의 이름 앞에 쓰던 뒤에 쓰던 모두 똑같다.
2) 배열 생성
intArray = new int [5]; // 배열에 들어갈 수 있는 총 원소의 수는 5개. 배열의 크기는 생성 후에는 변경이 불가능하다.
+a) 레퍼런스 변수:
레퍼런스 변수는 메모리상에 생성된 인스턴스(객체)를 가리키는데 사용되는 변수이다. 모든 인스턴스는 레퍼런스 변수만을 통해서 사용이 가능하다. 레퍼런스와 관련된 더 자세한 내용은 추후에 클래스(class)와 인스턴스(instance)에 대해서 설명할 때 추가하기로 하겠다.
위의 예시에서 intArray를 레퍼런스 변수라고 부른다. 이 배열이 바로 전에 타입에 대해서 설명할 때에 언급하였던 레퍼런스 타입이다. intArray는 배열의 주소 값, 즉 레퍼런스 값을 가지며 배열을 생성하기 전까지는 그 자체가 배열이 아니다. 배열 생성을 하지 않는다면 그 레퍼런스 변수의 값은 null이 된다.
배열 생성의 과정은 배열 공간을 할당받는 과정이다. new 연산자를 이용하여 배열을 생성하며 [] 안에 배열의 원소 개수를 적는다. 다음 소스는 5개의 정수형 공간을 항당받아 배열을 생성하고 생성된 배열에 대한 주소 값, 즉 레퍼런스 값을 저장한다.
+a) new 연산자:
new 연산자는 클래스의 새로운 인스턴스를 생성할 때에 사용하는 연산자이다. 객체를 저장할 메모리를 할당하고, 생성자를 호출하여 객체를 초기화한다. 생성자가 종료되면 new 연산자는 생성된 객체에 접근할 수 있도록 reference (객체에 대한 주소 / 식별자)를 반환하게 된다. 단순한 연산자가 아니라 메모리에 객체를 할당하고 객체를 초기화하는 중요한 역할을 한다.
- 배열 선언 시 주의 사항
배열에 대한 레퍼런스 변수를 선언할 때에 [] 안에 배열의 크기를 주어서는 안 된다. 다음 문장은 컴파일 오류를 발생시킬 것이다.
i.e. int intArray[10];
- 배열에 대한 레퍼런스 변수 선언의 다른 방법
배열의 레퍼런스 변수를 선언하는 두 가지 방법이 있다. 다음과 같이 변수의 이름에 []을 붙여서 선언하거나, 타입에 []을 붙여서 배열을 선언할 수 있다. 배열의 타입은 배열을 구성하는 원소들의 타입이다.
int intArray[]; 또는 int[] intArray;
float floatArray[] 또는 float[] floatArray;
- 배열의 선언과 동시에 생성
다음과 같이 배열의 선언과 생성을 동시에 할 수도 있다.
int intArray[] = new intArray[10];
- 배열 초기화
배열의 선언과 동시에 원소의 값을 '{}' 사이에 나열하여 값이 초기화된 배열을 만들 수 있다. 예를 들면 다음과 같다.
float floatArray[] = {0.01, 0.02, 0.03, 0.04};
floatArray 배열의 크기는 자동으로 4가 된다. 생성되는 배열의 원소 개수는 '{}' 사이에 나열된 값의 개수로 정해지므로 '[]' 사이에 값을 넣어서는 안 된다.
'Java > Java 기본' 카테고리의 다른 글
배열 원소 접근 (0) | 2018.06.12 |
---|---|
배열의 참조 (0) | 2018.06.11 |
continue 문과 break 문 (0) | 2018.06.11 |
중첩 반복 (0) | 2018.06.11 |
while 문 & do-while 문 (0) | 2018.06.11 |