5.4 Arrays 유틸리티 클래스 (Arrays Utility Class)
자바는 배열을 다룰 때 개발자가 직접 반복문(for)을 작성하지 않고도 배열의 복사, 정렬, 출력 등을 아주 손쉽게 처리할 수 있도록 java.util.Arrays 클래스를 기본적으로 제공합니다.
1. 배열의 출력 (Arrays.toString)
배열의 내용을 확인하고 싶을 때 배열의 참조변수를 그대로 출력하면 의미 없는 메모리 주소값([I@1b6d3586 등)이 출력됩니다. for문 없이 값을 깔끔한 문자열로 보려면 Arrays.toString()을 사용합니다.
import java.util.Arrays; // (1) 유틸리티 클래스 임포트 필수
public class ArraysEx {
public static void main(String[] args) {
int[] arr = {10, 20, 30, 40, 50};
System.out.println(Arrays.toString(arr));
// 출력: [10, 20, 30, 40, 50]
}
}
(다차원 배열의 경우 Arrays.deepToString()을 사용합니다.)
2. 배열의 복사 (Arrays.copyOf)
배열은 한 번 길이를 지정하면 변경할 수 없기 때문에, 더 큰 배열이 필요하다면 새로운 배열을 만들고 기존 요소를 복사해야 합니다. 이 때 Arrays.copyOf()를 사용하면 내부적으로 가장 빠른 속도로 복사해줍니다.
int[] arr = {1, 2, 3};
int[] arr2 = Arrays.copyOf(arr, arr.length); // 완벽히 똑같은 배열 복사
int[] arr3 = Arrays.copyOf(arr, 5); // 길이가 5인 배열로 복사. 남은 빈칸은 0
int[] arr4 = Arrays.copyOfRange(arr, 1, 3); // 인덱스 1부터 2까지만 복사
3. 배열의 정렬 (Arrays.sort)
배열 내부의 요소들을 오름차순으로 예쁘게 정렬할 때는 단 한 줄, Arrays.sort()를 호출하기만 하면 자바 내부의 최적화된 정렬 알고리즘(Dual-Pivot Quicksort 등)이 배열을 정렬해 줍니다.
int[] scores = { 95, 75, 80, 100, 50 };
Arrays.sort(scores);
System.out.println(Arrays.toString(scores));
// 출력: [50, 75, 80, 95, 100]
4. 배열의 비교 (Arrays.equals)
두 배열에 저장된 모든 요소가 완벽하게 동일한지(길이와 내용)를 판별할 때 사용합니다. == 비교 연산자는 주소값을 비교하므로 반드시 Arrays.equals()를 사용해야 안전합니다.
int[] a = {1, 2, 3};
int[] b = {1, 2, 3};
System.out.println(a == b); // false (각 배열의 메모리 주소가 다름)
System.out.println(Arrays.equals(a, b)); // true (안에 들어있는 내용물이 같음)