같은 타입의 여러 변수를 하나의 묶음으로 다루는 것
같은 타입의 여러 개의 변수를 선언해야 할때 손쉽게 다룰 수 있게 해준다.
반드시 '같은 타입'의 변수여야 한다. (서로 다른 타입의 변수들로 구성된 배열은 만들 수 없다.)
배열을 선언하는 방법은 "타입[] 변수이름;" 또는 "타입 변수이름[]" 으로 선언 가능하다.
타입[] 변수이름; // 배열 선언 (배열을 다루기 위한 참조변수 선언)
변수이름 = new 타입[길이(인덱스)]; // 배열을 생성 (실제 저장공간을 생성)
int[] score = new int[5]; // 5개의 int 값을 저장할 수 있는 배열 생성
int score[] = new int[5]; // 둘 다 사용 가능
값을 저장할 수 있는 공간은 score[0] 부터 score[4]까지 이다.
인덱스(index)는 배열의 요소마다 붙여진 일련번호로 각 요소를 구별하는데 사용된다.
인덱스(index)의 범위는 0부터 '배열길이 - 1'까지이다.
변수 score은 배열을 다루는데 필요한 참조변수일 뿐 값을 저장하기 위한 공간은 아니다.
배열을 생성하기 위해서는 연산자 'new'와 함께 배열의 타입과 길이를 지정해 주어야 한다.
길이가 0인 배열도 생성이 가능하다.(필요한 상황이 있을 수 있음)
배열이름.length 를 통해서 배열의 길이에 대한 정보를 얻을 수 있다.
int[] arr = new int[5];
int tmp = arr.length; // tmp에 arr배열의 길이인 5 저장
이미 생성된 배열의 길이는 변하지 않으므로 '배열이름.length는 상수이다. 즉 값을 읽을 수만 있고 변경할 수 없다.
배열을 이용한 for문의 조건식에서 자주 사용된다. (범위를 넘어가는 오류 방지)
모든 경우에 배열의 길이를 직접 적어주는 것보다 '배열이름.length'를 사용하는 것이 코드의 관리가 쉽고 에러가 발생할 확률이 적어진다.
배열은 생성과 동시에 자동적으로 자신의 타입에 해당되는 디폴트값으로 초기화 된다.
int[] score = new int[5]; // 배열 생성
score[0] = 50; // 각 요소에 직접 값을 저장한다.
score[1] = 60;
score[2] = 70;
score[3] = 80;
score[4] = 90;
int[] score = new int[] { 50, 60, 70, 80, 90 };
/*열의 생성과 초기화를 동시에한다*/
int[] score = { 50, 60, 70, 80, 90 }; // new int를 생략할 수 있음
int[] score;
score = new int[] { 50, 60, 70, 80, 90 }; // OK.
score = { 50, 60, 70, 80, 90 }; // 에러. new int[]생략할 수 없음
이 메서드는 배열의 모든 요소를 문자열로 만들어서 반환한다.
int[] iArr = { 100, 90, 80, 70, 60 };
System.out.println(Arrays.toString(iArr)); // 배열 iArr의 모든 요소 출력
int[] arr1 = new int[5];
int[] tmp = new int[arr1.length * 2];
for(int i = 0; i < arr.length; i++) {
tmp[i] = arr1[i];
arr1 = tmp; // 참조변수 arr이 새로운 배열을 가리키게 한다. arr1 의 주소가 tmp의 주소로 바뀌고, arr1은 배열 tmp를 가리키게 된다.
System.arraycopy(num, 0, newNum, 0, num.length);
// num [0] 에서 newNum [0]으로 num.length개의 데이터를 복사
선언방법 | 선언 예 |
---|---|
타입[ ][ ] 변수이름; | int [ ][ ] score; |
타입 변수이름[ ][ ]; | int score[ ][ ]; |
타입[ ] 변수이름[ ]; | int[ ] score[ ]; |
int [][] score = new int [4][3]; // 4행 3열의 2차원 배열을 생성한다.
int[][] arr = new int[][] { {1,2,3}, {4,5,6} };
int[][] arr = { {1,2,3}, {4,5,6} }; // new int[][]가 생략됨
int[][] score = new int [5][]; // 두번째 차원의 길이를 지정하지 않는다.
score[0] = new int[3];
score[1] = new int[5];
score[2] = new int[1];
score[3] = new int[2];
score[4] = new int[2];
int[][] score = {
{100, 100, 100, 100}
, {20, 20, 20}
, {30, 30}
, {40, 40, 40, 40}
, {50. 50, 50}
};