배열이란?
배열은 같은 타입을 가진 여러 데이터를 하나의 변수에 저장할 수 있게 해주는 자료구조이다.
배열의 1차원 및 2차원 선언
1. int[] a = new int[5]; //배열의 변수 선언 및 크기에 맞는 배열 생성
2. int[] a = new int[]{1, 2, 3, 4, 5}; //배열의 변수 선언 및 초기화 1
3. int[] a = {1, 2, 3, 4, 5}; //배열의 변수 선언 및 초기화 2
위에서 배열의 선언 만으로는 배열을 사용할 수 없다. 배열 변수를 선언하게 되면 배열을 담을 빈 박스가 생기게 되는 것이다. 배열을 생성해서 대입하여 줌으로써 배열을 사용할 수 있게 되는데 여기서 잠깐, 짚고 넘어가야할 것이 있다.
위에서는 간단한 설명을 위해 배열 변수에 배열을 담는 다고 하였지만 사실은 메모리에 배열이 따로 저장되고 배열의 변수에는 메모리에 생성된 배열의 주소가 대입이 되는 것이다.
위의 사진은 전에 공부한 변수 선언 및 초기화와 이번에 학습한 배열 선언 및 초기화를 이해하기 쉽게 그림으로 그린 것이다.

위의 사진은 직접 배열을 선언 및 생성 해보고 배열의 값을 출력해 본 것이다. 위에서 설명한 것과 같이 주소가 출력되는 것을 볼 수 있으며 앞에 [I는 Int형 배열이라는 것이고 @뒤에가 주소이다.
또한, 기본값과 참조값에 대해서는 다음에 다시 정리해서 업로드할 예정이다.
int[][] arr1 = new int[num1][num2]; //arr1 배열 변수 선언, num1*num2의 크기를 가지는 배열 생성 및 주소값 전달
int[][] arr2 = { {1,2,3}, //arr2 배열 변수 선언, 2*3의 크기를 가지는 배열 생성 및 주소값 전달
{4,5,6} };
위와 같이 2차원 배열은 선언 및 생성, 주소값 전달이 가능하다. 또한 위와 같이 num1*num2 크기의 배열에서 배열만 생성하면 배열안의 값은 int는 0, String은 null이 default값으로 저장된다.
인덱스란?
인덱스란 순차적인 자료구조에서 각 요소의 위치를 나타내는데 사용되는 수이다.
인덱스의 가장 큰 특징으로는 인덱스의 수가 0부터 시작한다는 것이다.
위의 그림은 배열 생성과 그 배열의 인덱스를 이해하기 쉽게 그림으로 나타낸 것이다.
배열에서의 인덱스 이동
int[] num = new int [5];
num[1] = 1;
위에서 num[1]에 대한 자세한 동작 순서는 num에 저장된 배열의 주소를 X001이라고 한다면
num[i] = 1;
X001[i] = 1;
위와 같이 표현될 수 있는데 이것이 의미하는 것은 num은 배열을 가리키는 주소(아파트)를 저장되고 인덱스(층)으로 가게 안내 한다는 것을 의미한다.
배열 사용법
배열은 주로 반복문을 이용하여 값을 다룬다.
int[] nums = new int[5];
#1
for (int i = 0; i < nums.length; i++) {
nums[i] = i;
}
#2
for (int num : nums) {
System.out.print(num++ + " ");
}
#1은 인덱스의 번호가 로직에서 필요할 때 사용되는 일반적인 for문이고
#2는 배열의 값만을 필요할 떄 사용할 수 있는 것이며 for-each문이라고 불린다.