같은 데이터 타입을 가진 연속된 메모리 공간으로 이루어진 자료구조를 말한다.
아래의 그림은 배열의 구조를 그림으로 표현하고,
배열에 변수를 담을 때 어떻게 하는지와 담았을 때의 모습을 보여준다.

0 번 인덱스에 1, 2 번 인덱스에 2 ... 이런식으로 되어 있는데
배열을 가리키는 변수 자체가 값을 가지고 있는게 아니라 인트 값을 가질 수 있는 4 칸의 메모리를 가리킨다고 봐야 한다.
int[] array1 = new int[100];
int 타입의 배열, 변수명 array1 을 100 개의 정수값을 가지고 있다.
array1[0] = 50;
array1[10] = 100;
System.out.println(array1[0] + " 와 " + array1[10]);
// 결과 : 50 와 100
위처럼 하면 array1 배열의 0 번째에 50 을 10 번째에 100 을 넣을 수 있다.
배열을 선언하고 바로 값을 넣는 두가지 방법
int[] array2 = new int[]{1, 2, 3, 4};
int[] array3 = {1, 2, 3, 4};
System.out.println(array3[3]); // 결과 : 4
아래와 같이 배열에 있는 값을 꺼내서 다른 변수에 담을 수도 있다.
int value = array3[0];
System.out.println(value); // 결과 : 1
배열의 변수는 하나인데 여러가지 값이 들어가기 때문에 배열은 참조형 타입 이라고 한다 !!!
정수타입의 100 개 짜리의 배열에 for 문을 이용해서 1 부터 100 까지의 숫자를 차례대로 넣는 방법이다.
int[] iarray = new int[100];
for (int i = 0; i < iarray.length; i++) {
iarray[i] = i + 1;
}
이번에는 1 부터 100 까지의 합을 구하기
방법은 1 부터 100 까지의 값을 꺼내서 어딘가에 계속 넣어줘야 한다.
int sum = 0;
for (int i = 0; i < iarray.length; i++) {
sum += iarray[i];
// 변수는 선언한 지점이 어디냐에 따라서 사용할 수 있는 범위가 달라진다.
// 그것을 변수의 스코프라고 한다.
// 기본적으로 그 변수가 선언된 지점을 감싸고 있는 괄호 안이 변수의 스코프가 된다.
// 변수는 선언될 때 생성 되었다가 해당 블록이 끝날 때 소멸된다.
// 그래서 각 for 문의 i 가 중복으로 사용되어도 문제가 되지 않았던 것이다.
}
System.out.println(sum); // 결과 : 5050
int[][] array4 = new int[3][4];
위처럼 선언 해주면 아래와 같은 형태의 배열이 생성된다.

아래처럼 선언을 하면
array4[0] = 10;
int 형 배열을 가리키는 참조 변수이기 때문에 값을 담을 수 없다
array4[0][1] = 10;
이렇게 해야 값을 담을 수 있다.
int[][] array5 = new int[3][];
// 위처럼 선언 했을 때에는
array5[0] = new int[1];
// 0 번째 인덱스가 실제 가리키는 배열을 만들어줘야 한다.
array5[1] = new int[2];
array5[2] = new int[3];
그렇지 않으면 실행했을 때 에러가 발생한다.
아래의 이미지를 참고하자.
2차원 배열 또한 선언과 동시에 초기화 할 수 있다.
아래 처럼 선언과 동시에 초기화가 가능하다.
int[][] array6 = {{1}, {1, 2}, {1, 2, 3}};
System.out.println(array6[0][0]);
// 결과 : 1
System.out.println(array6[2][2]);
// 결과 : 3