개발/JAVA

Java 기초편 - 배열 정렬과 복사

예니03 2025. 1. 4. 11:32
반응형

Java에서 배열은 데이터를 효율적으로 관리하는 기본적인 자료구조입니다. 이번 글에서는 배열을 복사(Copy), 검색(Search), 그리고 정렬(Sort)하는 방법을 배워보겠습니다. 기본적인 배열 조작부터 사용자 정의 객체를 정렬하는 고급 예제까지 살펴볼게요! 😊

1. 배열 복사 (Array Copy)

배열의 크기를 변경하거나 일부 데이터를 추출하려면 배열을 복사해야 합니다.

예제: 다양한 배열 복사 방법

char[] src = "Java Programming".toCharArray(); // 원본 배열 생성
System.out.println(Arrays.toString(src));

// 1. `System.arraycopy`로 복사
char[] target = new char[src.length];
System.arraycopy(src, 0, target, 0, src.length);  
System.out.println(Arrays.toString(target));

// 2. `Arrays.copyOf`로 복사
target = Arrays.copyOf(src, src.length);
System.out.println(Arrays.toString(target));

// 3. `Arrays.copyOfRange`로 범위 복사
target = Arrays.copyOfRange(src, 5, 12);  // 5~11까지 복사
System.out.println(Arrays.toString(target));

출력 결과

[J, a, v, a,  , P, r, o, g, r, a, m, m, i, n, g]
[J, a, v, a,  , P, r, o, g, r, a, m, m, i, n, g]
[J, a, v, a,  , P, r, o, g, r, a, m, m, i, n, g]
[P, r, o, g, r, a, m]

핵심 포인트

  1. System.arraycopy: 배열을 특정 범위로 복사할 때 유용.
  2. Arrays.copyOf: 원본 배열 전체를 복사.
  3. Arrays.copyOfRange: 시작과 끝 인덱스를 지정해 일부 데이터를 복사.

2. 배열 검색 (Array Search)

Java에서는 배열에서 데이터를 검색할 때 이진 검색(Binary Search) 방식을 사용합니다.

예제: 기본 타입 검색

int[] nums = {6, 4, 3, 5, 7, 9, 8, 2, 1, 10};

// 정렬
Arrays.sort(nums);
System.out.println("정렬된 배열: " + Arrays.toString(nums));

// 검색
int index = Arrays.binarySearch(nums, 8);
System.out.println("8의 인덱스: " + index);

출력 결과

정렬된 배열: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
8의 인덱스: 7

핵심 포인트

  • Arrays.binarySearch: 배열이 정렬된 상태여야만 사용할 수 있습니다.
  • 데이터가 정렬되지 않았다면, 먼저 Arrays.sort를 사용해 정렬하세요.

3. 배열 정렬 (Array Sorting)

예제: 기본 정렬과 사용자 정의 클래스 정렬

(1) 기본 타입 배열 정렬

int[] scores = {80, 50, 30, 90, 75, 88, 77};
System.out.println("배열 원본: " + Arrays.toString(scores));

// 오름차순 정렬
Arrays.sort(scores);
System.out.println("오름차순 정렬: " + Arrays.toString(scores));

출력 결과

배열 원본: [80, 50, 30, 90, 75, 88, 77]
오름차순 정렬: [30, 50, 75, 77, 80, 88, 90]

 

(2) 내림차순 정렬

Integer[] scores = {80, 50, 30, 90, 75, 88, 77};  // `Integer` 타입으로 변경
Arrays.sort(scores, Collections.reverseOrder());
System.out.println("내림차순 정렬: " + Arrays.toString(scores));

출력 결과

내림차순 정렬: [90, 88, 80, 77, 75, 50, 30]

포인트

  • 기본 정렬은 오름차순(작은 값 → 큰 값)으로 동작합니다.
  • 내림차순 정렬은 Collections.reverseOrder()와 함께 사용해야 합니다.
  • 기본 타입(int)은 내림차순 정렬이 불가능하므로, Integer로 변환해야 합니다.

(3) 사용자 정의 클래스 정렬

사용자 정의 객체를 정렬하려면 Comparable 인터페이스를 구현해야 합니다.

class Member implements Comparable<Member> {
    String name;
    
    public Member(String name) {
        this.name = name;
    }
    
    @Override
    public int compareTo(Member other) {
        return this.name.compareTo(other.name);  // 이름 기준으로 정렬
    }
    
    @Override
    public String toString() {
        return name;
    }
}

// 정렬 예제
Member[] members = {
    new Member("홍길동"),
    new Member("고길동"),
    new Member("장길산"),
    new Member("임꺽정")
};

Arrays.sort(members);  // 오름차순 정렬
System.out.println("오름차순 정렬: " + Arrays.toString(members));

Arrays.sort(members, Collections.reverseOrder());  // 내림차순 정렬
System.out.println("내림차순 정렬: " + Arrays.toString(members));

출력 결과

오름차순 정렬: [고길동, 장길산, 임꺽정, 홍길동]
내림차순 정렬: [홍길동, 임꺽정, 장길산, 고길동]

 

4. 정리

  1. 배열 복사
    • System.arraycopy, Arrays.copyOf, Arrays.copyOfRange를 사용해 크기 변경 또는 일부 데이터를 복사.
  2. 배열 검색
    • Arrays.binarySearch는 정렬된 배열에서 데이터를 검색.
  3. 배열 정렬
    • 기본 타입과 사용자 정의 클래스 모두 Arrays.sort를 사용해 정렬.
    • 사용자 정의 클래스는 Comparable 인터페이스를 구현해야 정렬 가능.

Java의 배열 조작은 데이터 관리와 알고리즘 구현에 필수적인 기술입니다. 위 예제를 따라 해보며 배열의 기본과 고급 활용법을 익혀보세요! 😊

반응형