개발/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]
핵심 포인트
- System.arraycopy: 배열을 특정 범위로 복사할 때 유용.
- Arrays.copyOf: 원본 배열 전체를 복사.
- 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. 정리
- 배열 복사
- System.arraycopy, Arrays.copyOf, Arrays.copyOfRange를 사용해 크기 변경 또는 일부 데이터를 복사.
- 배열 검색
- Arrays.binarySearch는 정렬된 배열에서 데이터를 검색.
- 배열 정렬
- 기본 타입과 사용자 정의 클래스 모두 Arrays.sort를 사용해 정렬.
- 사용자 정의 클래스는 Comparable 인터페이스를 구현해야 정렬 가능.
Java의 배열 조작은 데이터 관리와 알고리즘 구현에 필수적인 기술입니다. 위 예제를 따라 해보며 배열의 기본과 고급 활용법을 익혀보세요! 😊
반응형