1. 배열(array)
1-1) 배열이란?
- 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것을 배열이라 한다. "배열은 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것"
- 여기서 중요한 것은 같은타입이어야 한다는 것이다.
- 서로 다른 타입의 변수들로 구성된 배열은 만들 수 없다.
Ex) int[] score = new int[5]; // 5개의 int값을 저장할 수 있는 배열 생성
1-2) 배열의 생성
- 배열을 선언하는 방법은 타입의 변수를 선언하고 변수 또는 타입에 배열임을 의미하는 대괄호 []를 붙이면 된다.
선언방법 | 선언예시 |
타입[ ] 변수이름; | int[] score; , String[] names; |
타입 변수이름[ ] | int score[]; , String names[]; |
* 배열의 생성
- 배열은 선언한 다음에는 배열을 생성해야 한다.
- 배열을 선언한 것은 단지 생성된 배열을 다루기 위한 참조변수를 위한 공간이 만들어질 뿐이고, 배열을 생성해야만 비로소 값을 저장할 수 있는 공간이 만들어지는 것이다.
타입[] 배열이름; // 배열을 선언 (배열을 다루기 위한 참조변수 선언)
배열이름 = new 타입[길이]; // 배열을 생성 (실제 저장공간을 생성)
1-3) 배열의 길이와 인덱스
- 생성된 배열의 각 저장공간을 배열의 요소(element)라고 하며, 배열이름[인덱스]읭 형식으로 요소에 접근한다.
- 인덱스(index)는 배열의 요소마다 붙여진 일련번호로 각 요소를 구별하는데 사용된다.
* 인덱스의 범위는 0부터 배열의 길이 -1 까지
- 배열에 값을 저장하고 읽어오는 방법은 변수와 같다.
- 단 변수이름 대신 배열이름[인덱스]를 사용한다는 점만 다르다.
* 배열의 길이
- 배열의 길이는 배열의 요소의 개수, 즉 값을 저장할 수 있는 공간의 개수이다.
- 배열의 길이는 양의 정수여야 한다.

1-4) 배열의 초기화
- 배열은 생성과 동시에 자동적으로 자신의 타입에 해당되는 기본값으로 초기화하므로 배열을 사용하기 전에 따로 초기화를 해주지 않아도 되지만 원하는 값을 따로 저장할 수 있다.

- 저장할 값들을 괄호{}안에 쉼표로 구분해서 나열하면 되고, 괄호안의 값의 개수에 의해 배열의 길이가 자동으로 결정되기 때문에 배열의 길이는 안적어도 된다.

1-5) 배열의 출력
int[] arr = {100,95,80,70,60}; //길이: 5, 마지막 인덱스: 4
arr.length : 배열의 길이 반환
for(int i=0;i<arr.length;i++) {
System.out.println(arr[i]);
}
for(int ele : arr) {
System.out.println(ele);
}
1-6) 배열의 복사
① for문을 이용한 복사
int[] arr = new int[]{1,2,3,4,5,};
int[] tmp = new int[arr.length * 2];
for(int i=0;i<arr.length;i++) {
tmp[i] = arr[i];
}
arr.length == 5
tmp.length == 10(i의 최대값 : 9)

② System.arraycopy()를 이용한 배열의 복사
- for문 대신 System클래스의 arraycopy()를 사용하면 보다 간단하고 빠르게 복사할 수 있다.
int arr[] = new int[]{1,2,3,4,5,};
int result[] = new int[arr.length * 2];
System.arraycopy(arr, 0, result, 0, arr.length)
==> arr배열 0번 인덱스부터 result 배열에 복사를 할건데, arr의 0번부터 복사를 시작해서 result 0번부터 순차적으로 대입 arr의 length만큼 복사
System.out.println(Arrays.toString(arr)); [1,2,3,4,5,]
System.out.println(Arrays.toString(result); [1,2,3,4,5,0,0,0,0,0]

2. 다차원배열
- 지금까지 우리가 배운 배열은 1차원 배열인데, 2차원이상의 배열도 선언해서 사용할 수 있다.
2-1) 2차원 배열의 선언과 인덱스
선언방법 | 선언예시 |
타입[][] 변수이름; | int[][] score; |
타입 변수이름[][]; | int sscore[][]; |
타입[] 변수이름[]; | int[] score[]; |
- 2차원 배열은 행과 열로 구성되어 있기 때문에 index로 행과 열에 각각 하나씩 존재한다.
- 행 index의 범위는 0~행의 길이 -1이고, 열 index의 범위는 0~열 인덱스-1이다.
- 각 요소에 접근하는 방법은 배열이름[행index][열index]; 이다.
2-2) 2차원 배열의 초기화
- 2차원 배열도 괄호를 사용해서 생성과 초기화를 동시에 할 수 있다.
- 다만,1 차원배열보다 괄호{}를 한번 더 써서 행렬로 구분해준다.
int[][] arr = new int[][]{{1,2,3},{4,5,6}};
int[][] arr = {{1,2,3},{4,5,6}};