같은 타입 데이터만 저장 가능
기본 데이터타입, 참조 데이터타입 모두 배열로 사용 가능
여러 변수에 해당하는 메모리 공간이 연속된 공간에 차례대로 생성됨
-> 한 번 생성된 배열은 크기 변경 불가능
선언, 생성, 초기화의 3단계 과정을 거쳐 사용
데이터 저장 공간은 배열의 데이터타입에 해당하는 기본값으로 자동으로 초기화
(byte, short, int = 0, long = 0L, float = 0f, double = 0.0
char = '\u0000' 또는 0, boolean = false, String =null)
배열 생성 시 각 공간에 해당하는 인덱스가 자동으로 부여됨
-> 0 ~ (배열크기 -1)
배열의 변수명을 사용하여 배열에 접근 가능(인덱스 필요)
배열의 크기는 배열명.length 속성을 통해 알 수 있음
< 배열 선언 및 생성 기본 문법 >
데이터타입[] 배열명 = new 데이터타입[배열 크기];
데이터타입 배열명[] = new 데이터타입[배열 크기];
데이터타입 뒤에 []를 붙여 배열임을 표시
선언된 배열의 변수는 참조형 변수로 취급됨
-> int는 기본형, int[]는 참조형
new 키워드를 사용하여 배열 공간 생성
데이터타입 뒤 []안에 생성할 배열의 크기를 명시
-> 생성되는 배열의 주소값을 선언된 배열 타입 변수에 저장
생성된 배열에는 자동으로 인덱스 번호 부여됨
int[] scores = new int[10];
int scores[] = new int[10];
int s_size = score.length; // 배열의 크기 구하기
System.out.println(score[9]);
System.out.println(scores[s_size - 1]);
// 위와 같은 코드
// 배열의 제일 마지막 인덱스를 표시
< 배열 접근 기본 문법 >
변수명[인덱스]
< 배열 선언, 생성, 초기화를 한꺼번에 수행하는 문법 >
데이터타입[] 배열명 = {데이터1, 데이터2, ... , 데이터n};
데이터타입[] 배열명 = new 데이터타입[] {데이터1, 데이터2, ... 데이터n};
int[] num = {10, 20, 30, 40, 50};
int[] num2 = new int[] {10, 20, 30, 40, 50};
< 반복문을 사용한 배열의 모든 인덱스 접근 >
for(int i = 0; i < 배열명.length; i++) { 배열명[i] }
< 배열의 주소값 변경 >
int[] a = {1, 2, 3}; int[] b = {4, 5, 6}; a = b; // b를 a에 대입
기존에 a가 참조하던 [1, 2, 3]은 버리고 b가 참조하던 [4, 5, 6]을 참조하게 됨
기존의 [1, 2, 3]은 불필요한 메모리 공간이 되어 Carbage Collector에 의한 정리대상이 됨
-> 더이상 필요없는 메모리공간은 자동으로 정리됨
1차원 배열 여러 개를 묶음으로 관리하는 배열
행과 열로 이루어진 테이블 구조와 유사한 구조
< 2차원 배열 선언, 생성, 초기화를 한꺼번에 수행하는 문법 >
데이터타입[][] 배열명 = { {값1, 값2, ..., 값n}, {값1, 값2, ..., 값n}, ... 생략 ... {값1, 값2, ..., 값n} };
int[][] arr2 = new int[3][]; // 행이 3개인 2차원 배열 생성
arr2[0] = new int[2];
arr2[1] = new int[3];
arr2[2] = new int[1];
// 행마다 열의 개수 다르게 할 수 있음
arr2[0][0]=1; arr2[0][1]=2;
arr2[1][0]=3; arr2[1][1]=4; arr2[1][2]=5;
arr2[2][0]=6;
//============================================================
int[][] arr3 = new int[2][]; // 행이 2개인 2차원 배열 생성
arr3[0] = new int[] {1, 2, 3}; // 초기화까지 한 번에 수행
arr3[1] = new int[] {4, 5};
< 2차원 배열 크기 >
- 행 크기 : 배열명.length
- 열 크기 : 배열명[행번호].length
< 반복문을 사용한 2차원 배열의 모든 인덱스 접근 >
for(int i = 0; i < 배열명.length; i++) { for(int j = 0; j < 배열명[i].length; j++) { 배열명[i][j] } }
int[][] arr = {
{1, 2},
{3, 4},
{5, 6}
};
System.out.println(arr[1][0]);
for(int i = 0; i < arr.length; i++) {
for(int j = 0; j < arr[i].length; j++) {
System.out.println(arr[i][j]);
}
}
< 2차원 배열의 열 크기 알아내기 >
위에서 말했듯이 2차원 배열의 경우 행마다 다른 열 크기를 가질 수 있기 때문에 각각의 행마다 열의 크기를 알아낼 수 있다.배열명[행번호].length