배열이란?
- 같은 타입(예: int)의 여러 변수를 하나로 묶음으로 다루는 것
- 같은 타입의 많은 데이터를 저장할 때 배열을 사용하면 많은 데이터들을 손쉽게 다룰 수 있다.
1
| int[] score = new int[5];
|
배열의 선언과 생성
선언 방법
- 원하는 타입의 변수를 선언하고 변수나 타입의 배열임을 의미하는 대괄호[]를 붙인다.
선언방법 | 선언 예시 |
---|
타입[] 변수이름: | int[] score; String[] name; |
타입 변수이름[]: | int score[]; String name[]; |
변수의 생성
- 배열을 선언했다면 다음으로 배열을 생성한다.
- 배열을 선언하는 것은 단지 생성된 배열을 다루기 위한 참조변수를 위한 공간을 만드는 것이고, 배열 생성까지 해야 값을 저장할 수 있는 공간이 만들어진다.
- 배열을 생성하기 위해서 연산자 ‘new’와 함께 배열의 타입과 길이를 지정해 주어야 한다.
new 연산자란? 인스턴스(객체)를 생성해 주는 역할 메모리(Heap 영역)에 데이터를 저장할 공간을 할당 > 공간의 참조값을 객체에게 반환 > 생성자를 호출
1
2
| 타입[] 변수이름; //배열 선언 (배열을 다루기 위한 참조변수 선언)
변수이름 = new 타입[길이]; 배열 생성 (실제 저장공간을 생성)
|
1
2
3
4
5
6
7
| // 길이가 5인 int배열 생성
int[] score; //int타입의 배열을 다루기 위한 참조변수 score 선언)
score = new int[5]; //int타입의 값 5개를 저장할 수 있는 배열 생성
// 위 코드를 아래와 같이 간략하게 배열을 선언과 생성을 동시에 할 수 있다
타입[] 변수이름 = new 타입[길이]; //배열의 선언과 생성 동시
int[] score = new int[5]; //길이가 5인 int배열
|
배열의 길이와 인덱스
- 생성된 배열의 각 저장공간 ‘배열의 요소’라고 한다.
- ‘배열이름[인덱스]’의 형식으로 배열의 요소에 접근한다.
- 인덱스(index)는 배열의 요소마다 붙여진 일련번호
- 즉, 배열이름의 인덱스번째의 요소에 접근할 때 사용되는데 인덱스는 1이 아닌 0부터 시작한다.
1
2
3
| int[] arr = new int[5]
arr[3] = 100;
// arr의 4(0부터 시작하니 해당 인덱스 +1)번째 값에 100을 저장한다.
|
배열이름.length
- 배열의 길이에 대한 정보를 가져올 때는
배열이름.length
를 이용하면 배열이름의 길이를 가져올 수 있다.
1
2
3
| int[] arr = new int[5];
System.out.print(arr.length);
// 출력 : 5
|
배열의 길이 변경하기
배열의 초기화
배열은 생성과 동시에 기본값으로 초기화되므로 따로 초기화를 할 필요 없지만, 원하는 값을 저장하려면 아래와 같이 각 요소마다 값을 저장해 줘야 한다.
1
2
3
| int[] score = new int[2];
score[0] = 1;
score[1] = 10;
|
하지만 아래와 같이 배열을 간단히 초기화할 수 있다.
1
| int[] score = new int[]{1, 10}; //배열의 생성과 초기화를 동시
|
괄호 안의 개수에 의해 배열의 길이가 자동으로 배열의 길이가 자동으로 결정되기 때문에 배열의 길이는 따로 적지 않아도 된다.
1
| int[] score = {1. 10}; // new int[] 생략 가능
|
배열의 출력
배열에 저장된 값을 확인할 경우 다음과 같은 방법들로 출력이 가능하다.
1
2
3
4
5
6
7
8
9
| int[] arr = {100, 90, 80, 70, 60};
// (1)
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
// (2)
System.out.println(Arrays.toString(arr));
|
- arr값을 바로 출력하면 ‘타입@주소’의 형식으로 출력된다.
- 하지만 예외적으로 char배열은 println 메소드로 출력하면 그대로 출력이 된다.
- println메소드가 char배열일 때만 동작하도록 작성되었기 때문
1
2
3
| char[] charArr = {'a', 'b', 'c', 'd'};
System.out.println(charArr);
// abcdrk 출력
|
배열의 복사
이전 내용에서 다뤘던 배열의 길이 변경하기에 이은 배열의 복사하는 방법
1
2
3
4
5
| int[] arr = new int[5];
int[] tmp = new int[arr.length * 2]; //기존 arr 배열 길이의 2배인 배열 생성
for (int i = 0; i < arr.length; i++)
tmp[i] = arr[i]; //arr[i]의 값을 tmp[i]에 저장
arr = tmp; // 참조변수 arr이 새로운 배열을 가리키게 한다.
|
System.arraycopy()를 이용한 배열의 복사
arraycopy()를 사용하면 보다 간단하고 빠르게 배열의 복사가 가능하다.
1
2
3
4
| System.arraycopy(num, 0, newNum, 0, num.length);
//설명
System.arraycopy(원본배열, 원본배열의 복사 시작 지점, 복사할 배열, 복사할 배열의 복사 시작 지점, 복사할 요소의 개수)
|
복사하려는 내용보다 여유 공간이 적을 경우 에러가 발생한다.