Java 배열 마스터하기: 효율적인 데이터 처리를 위한 종합 가이드
Java는 배열이라는 데이터 구조를 제공하며, 이는 같은 타입의 요소들을 고정된 크기의 순차적 컬렉션으로 저장합니다. 배열은 데이터 컬렉션을 저장하는 데 사용되지만, 같은 타입의 변수 컬렉션으로 생각하는 것이 더 유용합니다.
number0, number1, ..., number99 같은 개별 변수들을 선언하는 대신, numbers 같은 하나의 배열 변수를 선언하고 numbers[0], numbers[1], ..., numbers[99]로 개별 변수들을 표현합니다.
이 튜토리얼에서는 배열 변수 선언, 배열 생성, 인덱스 변수를 사용한 배열 처리 방법을 소개합니다.
배열 변수 선언
프로그램에서 배열을 사용하려면 배열을 참조할 변수를 선언하고, 그 변수가 참조할 수 있는 배열 타입을 지정해야 합니다. 배열 변수 선언 문법은 다음과 같습니다:
문법
dataType[] arrayRefVar; // 권장 방식
또는
dataType arrayRefVar[]; // 작동하지만 권장하지 않음
참고 - dataType[] arrayRefVar 스타일이 권장됩니다. dataType arrayRefVar[] 스타일은 C/C++ 언어에서 유래했으며 C/C++ 프로그래머들을 위해 Java에 채택되었습니다.
예제
다음 코드 조각들은 이 문법의 예들입니다:
double[] myList; // 권장 방식
또는
double myList[]; // 작동하지만 권장하지 않음
배열 생성
new 연산자를 사용하여 다음 문법으로 배열을 생성할 수 있습니다:
문법
arrayRefVar = new dataType[arraySize];
위 문장은 두 가지 일을 합니다:
배열 변수 선언, 배열 생성, 배열 참조를 변수에 할당을 한 문장으로 결합할 수 있습니다:
dataType[] arrayRefVar = new dataType[arraySize];
또는 다음과 같이 배열을 생성할 수도 있습니다:
dataType[] arrayRefVar = {value0, value1, ..., valuek};
배열 요소들은 인덱스를 통해 접근합니다. 배열 인덱스는 0부터 시작하며, 0부터 arrayRefVar.length-1까지입니다.
예제
다음 문장은 배열 변수 myList를 선언하고, double 타입 10개 요소의 배열을 생성하여 그 참조를 myList에 할당합니다:
double[] myList = new double[10];
다음 그림은 배열 myList를 나타냅니다. 여기서 myList는 10개의 double 값을 가지며 인덱스는 0부터 9까지입니다.
배열 처리
배열 요소를 처리할 때 모든 요소가 같은 타입이고 배열 크기를 알기 때문에 주로 for 루프나 foreach 루프를 사용합니다.
예제
배열 생성, 초기화, 처리의 완전한 예제입니다:
Live Demo
public class TestArray {
public static void main(String[] args) {
double[] myList = {1.9, 2.9, 3.4, 3.5};
// 모든 배열 요소 출력
for (int i = 0; i < myList.length; i++) {
System.out.println(myList[i] + " ");
}
// 모든 요소 합계
double total = 0;
for (int i = 0; i < myList.length; i++) {
total += myList[i];
}
System.out.println("Total is " + total);
// 최대 요소 찾기
double max = myList[0];
for (int i = 1; i < myList.length; i++) {
if (myList[i] > max) max = myList[i];
}
System.out.println("Max is " + max);
}
}
이 코드는 다음 결과를 생성합니다:
출력
1.9 2.9 3.4 3.5
Total is 11.7
Max is 3.5
foreach 루프
JDK 1.5에서 foreach 루프 또는 향상된 for 루프로 알려진 새로운 for 루프가 도입되었습니다. 이는 인덱스 변수 없이 배열을 순차적으로 순회할 수 있게 합니다.
예제
다음 코드는 배열 myList의 모든 요소를 표시합니다:
Live Demo
public class TestArray {
public static void main(String[] args) {
double[] myList = {1.9, 2.9, 3.4, 3.5};
// 모든 배열 요소 출력
for (double element: myList) {
System.out.println(element);
}
}
}
이 코드는 다음 결과를 생성합니다:
출력
1.9
2.9
3.4
3.5
메서드에 배열 전달
기본 타입 값을 메서드에 전달할 수 있는 것처럼 배열도 메서드에 전달할 수 있습니다. 예를 들어 다음 메서드는 int 배열의 요소들을 표시합니다:
예제
public static void printArray(int[] array) {
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + " ");
}
}
배열을 전달하여 호출할 수 있습니다. 예를 들어 다음 문장은 3, 1, 2, 6, 4, 2를 표시하기 위해 printArray 메서드를 호출합니다:
예제
printArray(new int[]{3, 1, 2, 6, 4, 2});
메서드에서 배열 반환
메서드는 배열을 반환할 수도 있습니다. 예를 들어 다음 메서드는 다른 배열의 역순인 배열을 반환합니다:
예제
public static int[] reverse(int[] list) {
int[] result = new int[list.length];
for (int i = 0, j = result.length - 1; i < list.length; i++, j--) {
result[j] = list[i];
}
return result;
}
Arrays 클래스
java.util.Arrays 클래스에는 배열 정렬, 검색, 비교, 요소 채우기 위한 다양한 정적 메서드들이 포함되어 있습니다. 이 메서드들은 모든 기본 타입에 대해 오버로드되어 있습니다.
| 번호 |
메서드 & 설명 |
| 1 |
public static int binarySearch(Object[] a, Object key)
지정된 Object 배열(Byte, Int, double 등)에서 이진 검색 알고리즘으로 지정된 값 검색. 배열은 호출 전 정렬되어야 함. 검색 키가 리스트에 있으면 인덱스 반환, 없으면 (–(삽입 포인트 + 1)) 반환. |
| 2 |
public static boolean equals(long[] a, long[] a2)
지정된 두 long 배열이 서로 같으면 true 반환. 두 배열이 같은 요소 수를 가지고 모든 대응되는 요소 쌍이 같으면 같음으로 간주. 다른 기본 타입(Byte, short, Int 등)에도 같은 메서드 사용 가능. |
| 3 |
public static void fill(int[] a, int val)
지정된 int 배열의 각 요소에 지정된 int 값 할당. 다른 기본 타입(Byte, short, Int 등)에도 같은 메서드 사용 가능. |
| 4 |
public static void sort(Object[] a)
요소들의 자연적 순서에 따라 지정된 객체 배열을 오름차순으로 정렬. 다른 기본 타입(Byte, short, Int 등)에도 같은 메서드 사용 가능. |