1. 배열의 초기화
배열은 생성과 동시에 자동적으로 자신의 타입에 해당하는 기본값으로 초기화되지만, 원하는 값을 저장하려면 각 요소마다 값을 지정해 줘야한다.
int[] score = new int[5]; // 길이가 5인 int형 배열을 생성
score[0] = 50; // 각 요소에 값을 저장
score[1] = 60;
score[2] = 70;
score[3] = 80;
score[4] = 90;
int[] score = new int[] {50, 60, 70, 80, 90}; // 배열의 생성과 초기화를 동시에
int[] score = {50, 60, 70, 80, 90}; // new int[]를 생략할 수 있음
위와 같이 배열의 생성과 초기화를 동시에 할 수 있으며, new int[]를 생략할 수도 있다.
int[] score;
score = new int[] {50, 60, 70, 80, 90}; // OK
int[] score;
score = {50, 60, 70, 80, 90}; // 에러. New int[]를 생략할 수 없음
2. 배열의 출력
배열에 저장된 값을 확인할 때, 다음과 같이 for문을 사용하면 된다.
int[] iArr = {100, 95, 80, 70, 60};
// 배열의 요소를 순서대로 하나씩 출력
for (int i = 0 ; i < iArr.length ; i++) {
System.out.println(iArr[i]);
}
'Arrays.toString(배열이름)' 메서드를 사용하면 배열의 내용을 더 쉽게 확인할 수 있다.
* Arrays.toString()을 사용하려면, 'import java.util.*;'를 추가해야 한다.
int[] iArr = {100, 95, 80, 70, 60};
System.out.println(Arrays.toString(iArr));
// 배열 iArr의 모든 요소를 출력한다. [100, 95, 80, 70, 60]이 출력
iArr의 값을 바로 출력하면 어떻게 될까?
iArr은 참조변수이기에 변수에 저장된 값, 즉 '배열의 주소'가 출력된다.
// 배열을 가리키는 참조변수 iArr의 값을 출력한다.
System.out.println(iArr); // [I@14318bb와 같은 형식의 문자열이 출력된다.
예외적으로 char 배열은 println 메서드로 출력하면 각 요소가 구분자없이 그대로 출력된다.
* println 메서드가 char 배열일 때만 이렇게 동작하도록 작성되었음
char[] chArr = {'a', 'b', 'c', 'd'};
System.out.println(chArr); // abcd가 출력된다.
- 예제 ArrayEx3.java
public class ArrayEx3 {
public static void main(String[] args) {
int[] arr = new int[5];
// 배열 arr에 1~5를 저장한다.
for (int i = 0 ; i < arr.length ; i++)
arr[i] = i + 1;
System.out.println("[변경전]");
System.out.println("arr.length:" + arr.length);
for (int i = 0 ; i < arr.length ; i++)
System.out.println("arr[" + i + "]:" + arr[i]);
int[] tmp = new int[arr.length * 2];
// 배열 arr에 저장된 값들을 배열 tmp에 복사한다.
for (int i = 0; i < arr.length; i++)
tmp[i] = arr[i];
arr = tmp; // tmp에 저장된 값을 arr에 저장한다.
System.out.println("[변경후]");
System.out.println("arr.length:" + arr.length);
for (int i = 0 ; i < arr.length ; i++) {
System.out.println("arr[" + i + "]:" + arr[i]);
}
}
}
3. 배열의 복사
배열은 한번 생성하면 그 길이를 변경할 수 없기 때문에 더 많은 저장공간이 필요하다면 보다 큰 배열을 새로 만들고 이전 배열로부터 내용을 복사해야 한다.
int[] arr = new int[5];
int[] tmp = new int[arr.length * 2]; // 기존 배열보다 길이가 2배인 배열 생성
for(int i = 0 ; i < arr.length ; i++)
tmp[i] = arr[i]; // arr[i]의 값을 tmp[i]에 저장
arr = tmp; // 참조변수 arr이 새로운 배열을 가리키게 한다.
- System.arraycopy()를 이용한 배열의 복사
for문 대신 System 클래스의 arraycopy()를 사용하면 보다 간단하고 빠르게 배열을 복사할 수 있다.
System.arraycopy(src, srcPos, dest, destPos, length);
// src : 소스(원시). 원본파일
// srcPos : 원시 위치
// dest : 타겟, 대상, 도착지
// destPos: 목적지 위치
// length : 길이를 변경하면 기존 배열의 2개만 데려옴
public class ArrayCopyEx {
public static void main(String[] args) {
int[] arr = {5, 6, 7};
int[] tmp = new int[arr.length * 2]; // 6
System.arraycopy(arr, 0, tmp, 0, arr.length);
System.out.println(Arrays.toString(arr)); // [5, 6, 7, 0, 0, 0]
}
}
참고문헌 : 남궁성(2016), Java의 정석, 도우출판