배열이란?
배열은 인덱스와 인덱스에 대응하는 일련의 데이터들로 이루어진 연속적인 자료구조로서, 배열에는 같은 종류의 데이터들이 순차적으로 저장된다.
배열 선언 및 생성
(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;
출처 -명품 자바 에센셜 (저자 : 황기태)
'☕️JAVA' 카테고리의 다른 글
[JAVA] 자바 2차원 배열 생성 방법 (0) | 2021.01.08 |
---|---|
[JAVA] 자바 for-each문 사용법 및 예제코드 (0) | 2021.01.07 |
[JAVA] 명품 자바 에센셜 연습문제 2장 이론&실전 문제 풀이 (0) | 2021.01.05 |
[JAVA] 명품 자바 에센셜 연습문제 1장 풀이 (0) | 2021.01.05 |
[JAVA] 자바 반복문 (for문 / while문 / do~while문) (0) | 2020.02.18 |