메뉴 닫기

자바 Arrays 클래스 완전정복, 정렬부터 출력까지 한눈에 보기


자바 Arrays 클래스 완전정복, 정렬부터 출력까지 한눈에 보기

📌 실무에서 가장 많이 쓰는 배열 도구, Arrays 클래스 활용법 총정리!

개발자라면 한 번쯤은 배열을 다뤄본 경험이 있으실 텐데요.
배열은 자바에서 가장 기본적인 데이터 구조지만, 이를 보다 편리하게 다루기 위해 제공되는 클래스가 바로 java.util.Arrays입니다.
특히 Arrays.sort(), Arrays.toString() 같은 메서드는 실제 프로젝트에서도 자주 사용되기 때문에 꼭 익혀두어야 할 필수 도구죠.
이 글에서는 자바의 Arrays 클래스가 제공하는 기능들을 실무 활용 관점에서 자세히 설명드릴게요.
정렬, 검색, 출력부터 고급 활용까지 빠짐없이 알아보며, 여러분의 개발 생산성을 확실히 높여드리겠습니다.
차근차근 함께 살펴보도록 해요.

자바에서 배열을 효율적으로 다루기 위해 꼭 알아야 할 Arrays 클래스의 다양한 기능들을 실제 예제 중심으로 정리해보았습니다.
단순히 문법만 나열하는 것이 아니라, 실제 코드 작성 시 어떤 상황에서 어떤 메서드를 써야 하는지에 중점을 두고 설명해드릴게요.
입문자부터 실무 개발자까지 누구나 쉽게 이해할 수 있도록 구성했으니, 끝까지 읽어보시면 분명 도움이 되실 거예요.







🔗 Arrays 클래스란 무엇인가요?

자바에서 배열은 고정된 크기를 가지는 선형 데이터 구조로, 동일한 타입의 데이터를 순차적으로 저장할 수 있는 공간입니다.
하지만 배열을 다루다 보면 단순히 선언하고 값만 넣는 것 외에, 정렬, 출력, 비교, 복사 등 다양한 작업이 필요해지죠.
이럴 때 사용되는 도구가 바로 java.util.Arrays 클래스입니다.

Arrays 클래스는 자바에서 배열을 편리하게 다룰 수 있도록 돕는 유틸리티 클래스입니다.
java.util 패키지에 포함되어 있으며, 대부분 static 메서드로 제공되기 때문에 별도의 객체 생성 없이도 바로 사용할 수 있다는 점이 특징이에요.

  • 📌Arrays.sort() – 배열을 오름차순으로 정렬
  • 📌Arrays.toString() – 배열을 문자열로 출력
  • 📌Arrays.equals() – 두 배열이 같은지 비교
  • 📌Arrays.copyOf() – 배열 복사
  • 📌Arrays.binarySearch() – 특정 값 검색

이처럼 Arrays 클래스는 배열을 다룰 때 자주 쓰이는 기능들을 하나의 클래스에서 편리하게 제공하고 있어요.
기본적인 작업은 물론, 개발 생산성을 높여주는 고급 기능까지 제공하므로 반드시 익혀두어야 할 핵심 클래스입니다.

💎 핵심 포인트:
Arrays 클래스는 객체 생성 없이 사용할 수 있는 유틸리티 클래스로, 배열의 정렬, 출력, 복사 등 다양한 기능을 지원합니다.


🛠️ 배열 정렬하기 – Arrays.sort() 활용법

배열을 다룰 때 가장 자주 사용되는 기능 중 하나가 바로 정렬입니다.
자바에서는 배열 정렬을 위해 Arrays.sort() 메서드를 제공하며, 이 메서드는 내부적으로 퀵정렬 또는 병합정렬 기반 알고리즘을 사용하여 효율적인 정렬을 수행합니다.

기본적으로 sort()는 오름차순 정렬을 수행하며, int[], double[], String[] 등 다양한 타입의 배열에 사용할 수 있어요.
간단한 예제를 통해 살펴보겠습니다.

CODE BLOCK
import java.util.Arrays;

public class SortExample {
    public static void main(String[] args) {
        int[] numbers = {5, 2, 9, 1, 3};
        Arrays.sort(numbers);
        System.out.println(Arrays.toString(numbers));
    }
}

위 코드를 실행하면 배열이 오름차순으로 정렬되어 [1, 2, 3, 5, 9]와 같은 결과가 출력됩니다.
매우 간단하지만, 실제 개발 과정에서 매우 자주 쓰이기 때문에 꼭 익혀두셔야 해요.

📌 사용자 정의 정렬도 가능해요

문자열이나 객체 배열의 경우, Comparator를 사용하면 내림차순이나 커스텀 정렬 기준을 적용할 수 있습니다.
예를 들어 문자열 배열을 내림차순으로 정렬하고 싶다면 다음과 같이 작성할 수 있어요.

CODE BLOCK
import java.util.Arrays;
import java.util.Collections;

public class DescSortExample {
    public static void main(String[] args) {
        String[] names = {"Tom", "Anna", "John"};
        Arrays.sort(names, Collections.reverseOrder());
        System.out.println(Arrays.toString(names));
    }
}

이처럼 Arrays.sort()는 단순한 정렬뿐만 아니라, 상황에 따라 유연하게 정렬 기준을 바꿀 수 있어 실무에서도 매우 유용하게 쓰입니다.

💡 TIP: 기본 타입 배열은 Comparator를 사용할 수 없기 때문에, 래퍼 클래스를 사용하거나 List로 변환하여 정렬하는 방식도 활용됩니다.







📦 배열을 문자열로 출력 – Arrays.toString()

자바에서 배열을 콘솔에 출력하면 우리가 기대하는 형태와는 다르게 출력되는 경우가 많습니다.
예를 들어 int[] arr = {1, 2, 3};를 출력하면 [I@15db9742처럼 이상한 문자열이 나오는 경우가 있어요.
이는 배열이 객체이기 때문에, toString()을 직접 호출하면 메모리 주소가 출력되기 때문입니다.

이럴 때 사용하는 것이 바로 Arrays.toString() 메서드입니다.
이 메서드는 배열의 요소들을 보기 좋게 문자열 형식으로 변환해주는 역할을 하며, 출력할 때 매우 유용하게 쓰입니다.

CODE BLOCK
import java.util.Arrays;

public class PrintArrayExample {
    public static void main(String[] args) {
        int[] scores = {85, 90, 78};
        System.out.println(Arrays.toString(scores));
    }
}

위 코드의 출력 결과는 [85, 90, 78]이 되며, 배열의 내용을 한눈에 확인할 수 있습니다.
디버깅할 때도 매우 유용한 기능이죠.

📌 다차원 배열은 toString()으로 출력되지 않아요

toString() 메서드는 1차원 배열에는 적합하지만, 2차원 이상의 배열에는 적절하지 않습니다.
이럴 때는 Arrays.deepToString()을 사용해야 배열의 구조를 정확하게 출력할 수 있어요.

CODE BLOCK
import java.util.Arrays;

public class MultiArrayPrint {
    public static void main(String[] args) {
        int[][] matrix = {{1, 2}, {3, 4}};
        System.out.println(Arrays.deepToString(matrix));
    }
}

출력 결과는 [[1, 2], [3, 4]]처럼 중첩된 배열 구조도 보기 쉽게 표현됩니다.
2차원 이상의 배열을 다룰 때는 반드시 deepToString()을 활용해 주세요.

💎 핵심 포인트:
배열을 문자열로 출력할 때는 Arrays.toString(), 다차원 배열일 경우 Arrays.deepToString()을 사용해야 사람이 읽을 수 있는 형태로 출력됩니다.


🔍 특정 값 검색 – Arrays.binarySearch() 사용법

배열에서 원하는 값을 찾을 때 반복문을 사용하는 것이 일반적이지만, 자바에서는 Arrays.binarySearch() 메서드를 통해 더욱 빠르고 효율적으로 검색할 수 있습니다.
이 메서드는 이진 탐색 알고리즘을 기반으로 동작하며, 정렬된 배열을 전제로 작동하기 때문에 검색 전 반드시 Arrays.sort()를 먼저 적용해야 해요.

정렬되지 않은 배열에 binarySearch()를 적용하면 정확하지 않은 결과가 나올 수 있으므로 주의가 필요합니다.
간단한 사용 예제를 보면서 실제 작동 방식을 이해해볼게요.

CODE BLOCK
import java.util.Arrays;

public class SearchExample {
    public static void main(String[] args) {
        int[] nums = {3, 6, 1, 9, 2};
        Arrays.sort(nums); // 정렬 필수!
        int index = Arrays.binarySearch(nums, 6);
        System.out.println("6의 위치: " + index);
    }
}

이 코드는 배열을 정렬한 후 6이라는 값을 이진 탐색으로 찾아 그 인덱스를 반환합니다.
예제 결과는 배열 정렬 후 {1, 2, 3, 6, 9}가 되고, 6은 인덱스 3에 위치합니다.

📌 값이 없을 경우 음수가 반환돼요

검색하려는 값이 배열에 존재하지 않는다면, binarySearch()음수를 반환합니다.
이는 단순히 -1이 아니라 삽입 포인트의 음수 형태이기 때문에 이를 활용하면 삽입 위치를 계산하는 데도 활용할 수 있어요.

⚠️ 주의: binarySearch는 배열이 오름차순으로 정렬되어 있을 때만 정확하게 작동합니다.
정렬 없이 사용하면 예기치 못한 결과가 나올 수 있으니 반드시 sort() 먼저 호출 후 사용하세요.

💎 핵심 포인트:
Arrays.binarySearch()는 정렬된 배열에만 사용 가능하며, 원하는 값의 인덱스를 빠르게 반환합니다. 값이 없을 경우 삽입 위치의 음수 값을 반환하니 로직 처리 시 유의하세요.







💡 고급 기능 – fill(), equals(), copyOf()

Arrays 클래스는 정렬이나 검색 외에도 배열을 더욱 유연하게 다룰 수 있는 고급 메서드들을 제공합니다.
그중에서 자주 사용되는 세 가지는 fill(), equals(), copyOf()입니다.
이들 메서드는 배열의 초기화, 비교, 복사와 같은 작업을 매우 간단하게 처리할 수 있어 실무에서 매우 유용하게 쓰입니다.

📌 Arrays.fill() – 배열을 원하는 값으로 채우기

fill() 메서드는 배열의 모든 값을 특정 값으로 초기화할 때 사용합니다.
예를 들어 모든 요소를 0 또는 -1로 설정하고 싶을 때 유용하죠.

CODE BLOCK
int[] data = new int[5];
Arrays.fill(data, -1); // 모든 요소를 -1로 설정

📌 Arrays.equals() – 두 배열이 같은지 비교

equals() 메서드는 두 배열의 모든 요소가 같은지 비교합니다.
== 연산자는 객체 주소를 비교하므로 배열 비교에는 적절하지 않아요.
이때 Arrays.equals()를 사용하면 정확한 값 비교가 가능합니다.

CODE BLOCK
int[] a = {1, 2, 3};
int[] b = {1, 2, 3};
boolean isEqual = Arrays.equals(a, b); // true

📌 Arrays.copyOf() – 배열 복사하기

copyOf()는 배열을 원하는 길이만큼 복사하는 데 사용됩니다.
복사된 배열은 원본과는 독립적인 새로운 배열이며, 깊은 복사의 형태로 동작합니다.

CODE BLOCK
int[] original = {10, 20, 30};
int[] copied = Arrays.copyOf(original, 5); 
// 결과: [10, 20, 30, 0, 0]

💎 핵심 포인트:
fill(), equals(), copyOf()는 배열을 초기화하거나 비교, 복사할 때 매우 유용한 메서드입니다. 복잡한 로직 없이 한 줄로 처리할 수 있어 코드를 간결하게 만들어줍니다.


자주 묻는 질문 (FAQ)

Arrays 클래스는 어떤 패키지에 포함되어 있나요?
Arrays 클래스는 java.util 패키지에 포함되어 있으며, 별도의 외부 라이브러리 없이 기본적으로 사용할 수 있습니다.
binarySearch()를 사용하기 전에 꼭 정렬해야 하나요?
네, 반드시 배열이 오름차순으로 정렬된 상태여야 정확한 결과를 얻을 수 있습니다. 정렬되지 않은 배열에서 binarySearch()를 사용하면 잘못된 인덱스를 반환할 수 있습니다.
Arrays.toString()은 어떤 배열에 사용할 수 있나요?
1차원 배열에 사용할 수 있으며, 요소들을 문자열로 출력해줍니다. 2차원 이상의 배열에는 deepToString()을 사용해야 구조가 제대로 출력됩니다.
equals()와 == 연산자의 차이는 무엇인가요?
== 연산자는 배열의 주소값을 비교하고, equals()는 배열의 내용을 요소 단위로 비교합니다. 배열 비교에는 반드시 Arrays.equals()를 사용해야 합니다.
fill() 메서드로 부분만 초기화할 수 있나요?
네, Arrays.fill(arr, fromIndex, toIndex, value) 형식으로 특정 범위만 초기화하는 것도 가능합니다. 인덱스 범위는 fromIndex 이상, toIndex 미만입니다.
copyOf()로 더 긴 배열을 만들면 남는 공간은 어떻게 처리되나요?
복사 대상 배열보다 길게 copyOf()를 사용할 경우, 추가된 공간은 기본값(정수는 0, 객체는 null 등)으로 채워집니다.
Arrays.sort()로 내림차순 정렬도 가능한가요?
기본형 배열은 Comparator를 사용할 수 없어 직접 로직을 구현해야 하며, 객체 배열(String 등)은 Collections.reverseOrder()를 사용하면 내림차순 정렬이 가능합니다.
Arrays 클래스는 멀티스레드 환경에서 안전한가요?
Arrays 클래스의 대부분의 메서드는 멀티스레드 환경에서 동기화되어 있지 않기 때문에, 병렬 작업 시에는 별도의 동기화 처리가 필요합니다.



📌 자바 배열을 다루는 가장 효율적인 방법

자바에서 배열을 좀 더 편리하고 효율적으로 다루고 싶다면 Arrays 클래스는 반드시 익혀야 할 필수 도구입니다.
단순한 정렬부터 고급 기능까지 다양한 기능을 제공하며, 메서드들이 모두 static으로 정의되어 있어 객체 생성 없이 바로 사용할 수 있어요.
이번 글에서는 Arrays.sort(), toString(), binarySearch(), fill(), equals(), copyOf() 같은 실무에서 자주 사용되는 기능들을 중심으로 자세히 살펴보았습니다.
정렬을 통한 빠른 검색, 보기 쉬운 배열 출력, 정확한 비교와 복사까지, Arrays 클래스를 잘 활용하면 불필요한 반복문과 복잡한 로직을 줄일 수 있어 개발 효율이 크게 향상됩니다.
앞으로 배열 관련 기능이 필요할 때는 꼭 Arrays 클래스를 적극 활용해보세요.


🏷️ 관련 태그 : 자바기초, 배열정렬, 자바Arrays, 개발자팁, binarySearch, toString, 배열출력, 자바초보, 코드효율화, 프로그래밍기술