Java에서 배열(Array) 사용하기
1. 배열이란 무엇인가?
배열(Array)은 같은 데이터 타입의 여러 값을 하나의 변수에 저장할 수 있는 자료구조입니다. 배열은 크기가 고정되어 있으며, 생성된 배열의 각 요소는 인덱스를 통해 접근합니다. 배열은 프로그램에서 대량의 데이터를 효율적으로 처리하는 데 매우 유용합니다.
// int형 변수의 선언
int num1 = 1, num2 = 2, num3 = 3;
// 배열의 선언
int[] nums = {1, 2, 3};
위 코드는 nums라는 이름의 정수형 배열을 선언하고 값을 할당한 예입니다.
2. 1차원 배열
1차원 배열은 배열의 가장 기본적인 형태입니다. 자바에서 배열을 선언할 때 데이터 타입 뒤에 대괄호([])를 붙여 배열임을 나타내고, 배열을 생성할 때는 new 키워드를 사용하여 크기를 지정합니다.
int[] nums; // 배열 선언
nums = new int[5]; // 배열 생성
int[] nums2 = new int[5]; // 배열의 선언과 생성을 동시에 수행
2.1 배열의 초기화
배열을 생성한 후에는 각 원소에 값을 할당하여 초기화할 수 있습니다.
int[] nums = new int[5]; // 배열 생성
// 배열 초기화
nums[0] = 10;
nums[1] = 20;
nums[2] = 30;
nums[3] = 40;
nums[4] = 50;
// 배열 생성과 초기화를 동시에
int[] nums2 = {10, 20, 30, 40, 50};
위 예시에서 nums 배열은 크기가 5인 정수형 배열이며, 각 인덱스에 값을 대입해 초기화됩니다.
3. 다차원 배열
다차원 배열은 1차원 배열을 확장한 형태로, 여러 행과 열을 가지는 배열을 선언할 수 있습니다. 다차원 배열은 2차원, 3차원 등 다양한 차원으로 확장할 수 있습니다.
3.1 2차원 배열
2차원 배열은 행과 열로 구성되어 있으며, 배열 요소에 접근할 때는 두 개의 인덱스를 사용합니다.
int[][] array2D1; // 2차원 배열 선언
array2D1 = new int[3][4]; // 2차원 배열 생성
// 2차원 배열 초기화
array2D1[0][0] = 1;
array2D1[0][1] = 2;
array2D1[0][2] = 3;
array2D1[0][3] = 4;
int[][] array2D2 = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
}; // 선언과 생성 및 초기화를 동시에 수행
위 코드에서는 array2D1이 3x4 크기의 2차원 배열로 선언되어 있으며, 배열의 각 요소에 인덱스를 통해 접근하여 값을 할당합니다.
3.2 3차원 배열
3차원 배열은 행, 열, 높이의 구조로 배열을 선언할 수 있으며, 주로 3차원 공간 데이터를 다룰 때 사용됩니다.
int[][][] array3D1; // 3차원 배열 선언
array3D1 = new int[2][3][4]; // 3차원 배열 생성
// 3차원 배열 초기화
array3D1[0][0][0] = 1;
array3D1[0][0][1] = 2;
array3D1[0][0][2] = 3;
array3D1[0][0][3] = 4;
int[][][] array3D2 = {
{
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
},
{
{13, 14, 15, 16},
{17, 18, 19, 20},
{21, 22, 23, 24}
}
}; // 선언, 생성 및 초기화를 동시에 수행
4. 배열과 반복문
배열은 반복문과 함께 사용하면 더욱 강력한 도구가 됩니다. 특히 for문을 사용해 배열의 각 요소에 접근할 수 있습니다.
4.1 1차원 배열과 반복문
int[] arrayNum = new int[5];
// 반복문을 통해 배열에 값을 대입
for (int i = 0; i < arrayNum.length; i++) {
arrayNum[i] = i * 10; // 인덱스를 통해 각 요소에 접근
}
// 배열의 값을 출력
for (int num : arrayNum) {
System.out.println(num);
}
4.2 2차원 배열과 반복문
int val = 1;
int[][] array2D = new int[3][4];
// 2차원 배열에 값 할당
for (int i = 0; i < array2D.length; i++) {
for (int j = 0; j < array2D[i].length; j++) {
array2D[i][j] = val++; // 각 요소에 순차적으로 값 할당
}
}
// 2차원 배열의 값을 출력
for (int i = 0; i < array2D.length; i++) {
for (int j = 0; j < array2D[i].length; j++) {
System.out.print(array2D[i][j] + " ");
}
System.out.println();
}
5. 배열의 활용 사례
배열은 여러 분야에서 매우 유용하게 사용됩니다. 아래는 배열을 실제로 활용하는 몇 가지 대표적인 사례입니다.
- 데이터 정렬: 배열을 사용해 정렬 알고리즘(예: 버블 정렬, 퀵 정렬)을 구현할 수 있습니다.
- 행렬 연산: 2차원 배열을 사용하여 행렬 곱셈, 덧셈, 역행렬 계산을 수행할 수 있습니다.
- 검색 알고리즘: 배열에서 특정 값을 찾는 이진 검색(Binary Search) 알고리즘에 활용됩니다.
- 이미지 처리: 2차원 배열을 사용해 이미지 픽셀 데이터를 저장하고, 이를 처리할 수 있습니다.
6. 배열의 메모리 관리
배열은 연속된 메모리 공간에 저장되기 때문에 배열 요소에 인덱스를 사용해 직접 접근할 수 있어 매우 빠릅니다. 그러나 배열은 정적 자료구조이므로 크기가 고정되어 있으며, 배열을 생성할 때 지정한 크기를 초과할 수 없습니다.
- 장점: 배열은 메모리 접근 속도가 빠르며, 요소에 O(1) 시간에 접근할 수 있습니다.
- 단점: 배열의 크기는 한 번 설정되면 변경할 수 없으며, 크기를 초과할 경우 새로운 배열을 생성해 데이터를 복사해야 합니다.
7. 배열의 장점과 단점
7.1 장점
- 빠른 데이터 접근: 배열의 인덱스를 사용하여 O(1)의 시간 복잡도로 데이터에 접근할 수 있습니다.
- 메모리 사용 효율성: 배열은 동일한 데이터 타입의 연속된 메모리 공간을 할당받기 때문에 메모리를 효율적으로 사용할 수 있습니다.
7.2 단점
- 고정 크기: 배열은 한 번 생성되면 크기를 변경할 수 없습니다. 만약 더 많은 데이터를 저장해야 한다면 새로운 배열을 만들어야 합니다.
- 중간 요소 삭제: 배열에서 중간 요소를 삭제하면 그 이후의 모든 요소를 이동시켜야 하기 때문에 성능 저하가 발생할 수 있습니다.
8. 배열 관련 라이브러리와 유틸리티
자바에서는 배열과 관련된 유용한 라이브러리 및 유틸리티 클래스가 존재합니다. 그 중 몇 가지를 소개합니다.
- java.util.Arrays 클래스: 배열을 조작하기 위한 다양한 메서드를 제공합니다. 예를 들어, 배열을 정렬하거나 검색하는 메서드를 사용할 수 있습니다.
import java.util.Arrays;
int[] numbers = {3, 1, 4, 1, 5, 9};
Arrays.sort(numbers); // 배열 정렬
System.out.println(Arrays.toString(numbers)); // 배열 출력
- java.util.Collections 클래스: 배열을 리스트로 변환하거나 리스트를 배열로 변환할 수 있는 메서드를 제공합니다.
import java.util.Arrays;
import java.util.List;
String[] fruits = {"Apple", "Banana", "Orange"};
List<String> fruitList = Arrays.asList(fruits); // 배열을 리스트로 변환
9. 배열과 컬렉션 차이점
배열과 자바의 컬렉션(Collection)은 모두 데이터를 저장할 수 있지만 몇 가지 차이점이 있습니다.
- 크기: 배열은 고정 크기인 반면, 컬렉션(List, Set 등)은 동적으로 크기가 변경됩니다.
- 성능: 배열은 인덱스로 빠르게 접근할 수 있지만, 컬렉션은 추가 기능을 제공하는 대신 성능이 다소 떨어질 수 있습니다.
- 데이터 타입: 배열은 기본 데이터 타입(예: int, char)을 저장할 수 있지만, 컬렉션은 객체(참조형 타입)만 저장할 수 있습니다.
10. 결론
배열은 자바에서 가장 기본적이고 중요한 자료구조 중 하나로, 대량의 데이터를 처리하고 저장하는 데 매우 유용합니다. 배열을 적절히 활용하면 효율적인 성능을 갖춘 프로그램을 개발할 수 있습니다. 배열의 크기 제한과 같은 단점을 보완하려면 컬렉션을 고려할 수 있으며, 자바의 다양한 유틸리티 클래스와 함께 사용하면 더욱 강력한 기능을 발휘할 수 있습니다.
'JAVA > JAVA 기초' 카테고리의 다른 글
Java에서 조건문(if, switch) 다루기 (0) | 2024.09.26 |
---|---|
Java 연산자 기초와 사용법 (0) | 2024.09.25 |
JAVA 자료형 및 변수 (0) | 2024.09.23 |
JAVA 개발 환경 설치하기 (0) | 2024.09.22 |
Java 언어 (0) | 2024.09.21 |