1. 배열
가. Array Type
int a
int[] arr
Code language: CSS (css)
arr의 타입은 Reference Type 중 Array Type이다.
나. 배열 선언
int[] arr = new int[3];
// int가 들어가는 크기가 3인 배열 선언
Code language: JavaScript (javascript)
arr는 생성된 배열을 참조하는 reference 타입 변수다.int arr[],int[] arr모두 가능하지만int[]로 통일해서 사용하자.
int[] b = new int[]{1,2,3,4,5}; //추천
int[] c = {1,2,3,4,5}
Code language: JavaScript (javascript)
- 생성과 초기화를 동시에 가능.
int err[];
err = {1,2,3,4}
- 아래는 에러가 발생함.
- 한 줄 단위로 컴파일하기 때문에 컴파일러가
{1,2,3,4}를 이해하기 어렵기 때문에.
아래는 자료형마다 가지는 기본값이다.
| 자료형 | 기본값 |
| boolean | false |
| char | ‘\u0000’ |
| byte, short, int | 0 |
| long | 0L |
| float | 0.0f |
| double | 0.0 |
| Reference Type | null (아무것도 참조하지 않음.) |
다. 배열의 성질
배열은 immutable 하다.
배열은 최초 메모리 할당 이후, 변경할 수 없음.
(개별 요소는 변경할 수 있지만, 요소를 추가하거나 삭제할 수 없다.)
int[] scores = {90, 80, 100}; 배열에 새로운 점수를 추가하고 싶을 때. (배열 확장)
scores = new int[4]; //가능
scores = new int[]{90, 80, 100, 95}; //가능
scores = Arrays.copyOf(scores, 5); //가능
scores = {90, 80, 100, 95}; //불가능!!!!
Code language: JavaScript (javascript)
scores = {90, 80, 100, 95};:new int()를 생략하려면 선언과 할당을 동시에 수행해야 한다. 지금은 선언이 생략되었다.Arrays.copyOf(scores, 5);:scores를 복사하고 빈 공간은0을 채운 크기5의 배열을 생성.
라. 배열 복사
import java.util.Arrays;
...
int[] arr = new int[]{1, 2, 3, 4};
int[] arr2 = arr; // soft copy. 주소값만 복사
int[] arr3 = Arrays.copyOf(arr, 4); // Deep copy. 새로운 배열 생성 후 복사
Code language: JavaScript (javascript)
arr2는 변수 arr에 저장된 배열의 주소값을 복사할 뿐 정말로 기존의 배열을 복사한 새로운 배열을 생성하는 것은 안니다.
새로운 배열을 생성 후 복사하기 위해서 arr3처럼 Arrays.copyOf() 메서드를 활용하자.
마. 출력
import java.util.Arrays;
...
int[] arr = new int[] {1,2,3,4};
System.out.println(arr.toString());
System.out.println(Arrays.toString(arr));
/*
[I@5b464ce8
[1, 2, 3, 4]
*/
Code language: JavaScript (javascript)
Arrays.toString(arr): 쉽게 배열의 값을 출력할 수 있음.
2. 다차원 배열
가. 이차원 배열 선언
int[][] int Array = new int[4][4];
int[][] intArray = new int[4][];
intArray[0] = new int[3];
intArray[1] = new int[2];
// intArray[2] = {1,2,3}; //오류
Code language: JavaScript (javascript)
자바는 다차원 배열의 크기는 가변적이다.
이차원 배열은 1차 배열만 생성 후, 필요에 따라서 2차 배열을 생성할 수 있음.
이는 자바에선 다차원 배열은 **“1차원 배열의 연속”**이기 때문이다.
(아마 int[] array;가 가능한 이유랑 같은 듯. 이차원 배열 int[?][]에는 실제 배열이 아니라 어떤 int[]의 주소값을 저장하고 있을 뿐이다.)

다차원 배열 구조 – 1차원 배열의 연속
intArray[2], intArray[3]는 기본값인 null 값을 가짐.
나. 공간복잡도
int[][] brr = new int[2][10];
int[][] brr2 = new int[10][2];
Code language: JavaScript (javascript)
Java에서는 brr과 brr2의 공간복잡도는 다르다. (C에선 같음)
brr이 메모리를 더 작게 차지한다. (작은 것부터)
이 또한 자바에선 다차원 배열은 “1차원 배열의 연속”이기 때문이다.
다. 배열과 반복문
int[][] intArray = new int[4][];
intArray[0] = new int[1];
intArray[1] = new int[2];
intArray[2] = new int[3];
intArray[3] = new int[4];
for(int i = 0; i < intArray.length; i++){
for(int j = 0; j < intArray[i].length; j++){
...
}
}
Code language: JavaScript (javascript)
for(int j = 0; j < intArray[i].length; j++){: 2차원 배열의 크기가 다를 수 있기 때문에
