JAVA/JAVA 기초

Java에서 배열(Array) 사용하기

임베디드 친구 2024. 9. 24. 14:59
728x90
반응형

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. 배열의 활용 사례

배열은 여러 분야에서 매우 유용하게 사용됩니다. 아래는 배열을 실제로 활용하는 몇 가지 대표적인 사례입니다.

  1. 데이터 정렬: 배열을 사용해 정렬 알고리즘(예: 버블 정렬, 퀵 정렬)을 구현할 수 있습니다.
  2. 행렬 연산: 2차원 배열을 사용하여 행렬 곱셈, 덧셈, 역행렬 계산을 수행할 수 있습니다.
  3. 검색 알고리즘: 배열에서 특정 값을 찾는 이진 검색(Binary Search) 알고리즘에 활용됩니다.
  4. 이미지 처리: 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. 결론

배열은 자바에서 가장 기본적이고 중요한 자료구조 중 하나로, 대량의 데이터를 처리하고 저장하는 데 매우 유용합니다. 배열을 적절히 활용하면 효율적인 성능을 갖춘 프로그램을 개발할 수 있습니다. 배열의 크기 제한과 같은 단점을 보완하려면 컬렉션을 고려할 수 있으며, 자바의 다양한 유틸리티 클래스와 함께 사용하면 더욱 강력한 기능을 발휘할 수 있습니다.

728x90
반응형

'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