배열(array)
인덱스(index)와 인덱스에 대응하는 데이터들로 이루어진 연속적인 자료 구조
같은 종류의 데이터들이 순차적으로 저장
배열의 선언 및 생성
(1) 배열에 대한 레퍼런스 변수 선언
배열 선언 시 []에 크기를 지정하면 안됨
(2) 배열 생성 - 배열의 저장 공간 할당
배열 공간을 할당받고 이 배열에 대한 레퍼런스 값(주소 값) 저장
// (1) 배열에 대한 레퍼런스 변수 선언
배열타입[] 배열이름;
int[] intArray;
배열타입 배열이름[];
int intArray[];
// (2) 배열 생성 - 배열의 저장 공간 할당
배열이름 = new 타입[원소개수];
intArray = new int[5];
// 배열 선언과 동시에 생성
배열타입[] 배열이름 = new 타입[원소개수];
int[] intArray = new int[5];
// 배열 초기화
배열타입[] 배열이름 = {원소};
int[] intArray = {4, 3, 1, 2, 5}; // 원소의 개수만큼 배열 공간 자동 할당
배열 인덱스 | 배열 원소 접근
배열의 인덱스는 정수만 가능
인덱스는 0부터 시작하며 마지막 원소의 인덱스는 (배열크기 - 1)
배열의 원소는 인덱스를 이용하여 접근
배열이름[인덱스]
intArray[3] = 5; // 원소3에 5 저장
int n = intArray[3]; // 변수n에 원소3의 값 저장
* 음수 또는 배열의 범위를 넘어서는 인덱스는 사용 불가
* 배열의 원소에 접근하기 위해서는 반드시 배열이 생성(공간 할당)되어 있어야 함
* 배열이 생성되어 있지 않은 상태에서 배열을 사용하면 초기화되지 않았다는 컴파일 오류 또는 실행시간 오류 발생
레퍼런스 치환 | 배열 공유
자바에서는 레퍼런스 변수와 배열 공간이 분리되어 있어
다수의 레퍼런스 변수가 하나의 배열 공간을 가리키는 배열 공유가 쉽게 이루어짐
int[] intArray = new int[5];
int[] myArray = intArray;
// 레퍼런스 변수 myArray를 생성하여 intArray 변수의 값을 myArray에 치환
// intArray 배열이 복사되는 것이 아니라 레퍼런스 값(주소값)만 복사
// intArray와 myArray는 동일한 레퍼런스 값을 가지게 되어 배열을 공유하고 배열 원소 접근 가능
배열 크기
자바는 배열을 객체로 다룸
배열 객체에는 배열의 저장 공간과 함께 배열의 크기 값을 가진 length 필드 존재
배열이름.length
int[] intArray = new int[5];
int size = intArray.length; -> size = 5
for-each문
배열이나 나열(enmeration)의 크기만큼 루프를 돌며 각 워소를 순차적으로 접근하는데 유용하게 만든 for문
for(배열타입 변수: 배열이름) {
실행문;
}
int[] n = {1, 2, 3, 4, 5};
int sum = 0;
for(int k: n) { // n.length번 반복
sum += k;
}
// for문
for(int i = 0; i < n.length; i++) {
int k = n[i];
sum += k;
}
2차원 배열
배열의 선언 및 생성
// 배열 선언
배열타입[][] 배열이름;
int[][] intArray;
배열타입 배열이름[][];
int intArray[][];
// 2차원 배열의 저장 공간
[행의개수][열의개수]
// 배열 생성
배열이름 = new 배열타입[행의개수][열의개수];
intArray = new int[2][5];
// 배열 초기화
배열타입[][] 배열이름 = {{원소},{원소}, ... ,{원소}} // 원소의 개수만큼 배열 공간 자동 할당
배열 크기
배열이름.length -> 배열의 행의 개수
배열이름[인덱스].length -> [인덱스]번째 행에 있는 열의 개수
비정방형 배열
정방형 배열: 각 행의 열 개수가 모두 동일한 배열
비정방형 배열: 행마다 열의 개수가 서로 다른 배열
// 비정방형 배열
배열이름 = new 배열타입[행의개수][];
배열이름[인덱스(행번호)] = new 배열타입[열의개수];
int[][] i;
i = new int[4][];
i[0] = new int[1];
i[1] = new int[3];
i[2] = new int[2];
i[3] = new int[5];
i.length -> 4
i[0].length -> 1
i[1].length -> 3
i[2].length -> 2
i[3].length -> 5
int[][] j = {{0}, {1, 3, 5}, {2, 4}};
j.length -> 3
j[0].length -> 1
j[1].length -> 3
j[2].length -> 2