반응형

 

배열이란?

배열은 인덱스와 인덱스에 대응하는 일련의 데이터들로 이루어진 연속적인 자료구조로서, 배열에는 같은 종류의 데이터들이 순차적으로 저장된다.

 

배열 선언 및 생성

(1) 배열에 대한 레퍼런스 변수 arr 선언

 

(2) 배열 생성

 

 

int arr[]; // 배열에 대한 레퍼런스 변수 arr를 선언한다.

이 선언문은 레퍼런스 변수 arr를 선언하는 것으로 배열 공간은 생성되지 않는다. arr변수는 레퍼런스(혹은 참조)라고 불리는 배열의 주소 값을 가지며 그 자체가 배열은 아니므로 arr변수 값은 null이다. 

배열에 대한 레퍼런스 변수는 다음 두 가지 방법으로 선언 가능하다.

int arr[]; 또는 int [] arr;

그리고 선언 시 [ ] 안에 배열의 크기를 지정하면 컴파일 오류가 발생하므로 주의해야 한다.

int arr[5]; // =>> 컴파일 오류 발생!! 선언 시 배열의 크기를 지정해서는 안됨.

 

 

배열 생성

배열 생성은 배열 공간을 할당받는 것이다. 반드시 new 연산자를 이용하여 배열을 생성하며 [ ] 안에 생성할 원소 개수를 지정한다.

int arr[];
arr = new int[5];

또는

int arr[] = new int[5]; // 생성과 선언을 동시에

 

 

배열 초기화

배열의 선언문에서 '{ }'사이에 원소를 나열해서 초기화된 배열을 만들 수 있다.

int arr[] = {1,2,3,4,5};
double arr2[] = {0.1,0.2,0.3,0.4}

여기서, 배열의 원소의 개수를 '[ ]'에 적지 않아도 자동으로 arr의 배열 크기는 5, arr2의 배열크기는 4가 된다. 배열의 크기는 '{ }' 사이에 나열된 값의 개수로 정해진다.

 

 

배열 인덱스와 원소 접근

배열의 인덱스는 정수만 가능 하다. 인덱스는 0부터 시작하며 마지막 원소의 인덱스는 (배열 크기-1)이다.

int arr = new int[5];
arr[0] = 5;
arr[3] = 6;
int n = arr[3];

 

arr의 원소 개수는 5개이다. 만약 인덱스 범위를 벗어나는 값에 접근할 경우 오류가 발생한다.

int x = arr[-2]; // 실행오류. 인덱스로 음수는 사용 불가.
int y = arr[5]; // 실행 오류. 5는 인덱스의 범위(0~4)를 벗어남.

그리고 배열이 생성되어 있지 않은 상태에서 배열의 원소에 접근할 경우 오류가 발생한다.

int arr[]; // 배열에 대한 레퍼런스만 선언함.
arr[1] = 8; // 실행 오류. 배열이 생성되어있지 않음.

 

 

레퍼런스 치환과 배열 공유

자바에서는 배열 공간과 레퍼런스 변수가 분리되어있기 때문에 생성된 배열에 대한 공유가 쉽게 이루어진다. 즉, 생성된 배열을 다수의 레퍼런스가 참조할 수 있다.

int arr[] = new int[5];
int arr2[] = arr; // 레퍼런스 치환. arr과 arr2는 동일한 배열을 참조.

이 레퍼런스 치환은 arr 배열을 복사해서 새로운 배열을 만드는 것이 아닌 레퍼런스만 복사되므로 arr와 arr2는 하나의 배열을 공유하게 된다. 즉, arr[1] = 3;으로 수정한 뒤 arr2[1] = 6;으로 수정하면 최종적으로 arr[1]에는 6이 저장된다.

 

 

배열의 크기, length 필드

자바는 배열을 객체로 다룬다. 배열이 생성되면 배열 공간과 함께 배열의 크기 값을 가진 length 필드가 배열 객체 내에 생성된다.

int arr[];
arr = new int[5];

int size = arr.length;
// size는 5;

 

 

 

 

 

출처 -명품 자바 에센셜 (저자 : 황기태)

반응형

+ Recent posts