본문 바로가기

자바

[JAVA] 배열(Array)

728x90

1. 목적

배열은 같은 타입의 여러 개의 데이터를 하나의 변수에 저장할 수 있는 자료구조다.

Java에서는 배열을 사용하여 데이터를 효율적으로 관리하고 반복적인 연산을 쉽게 수행할 수 있다.

배열을 사용하는 이유는 아래와 같다.

  1. 여러 개의 값을 하나의 변수에 저장 가능
  2. 반복문을 활용한 데이터 처리 가능
    • 모든 배열 요소의 합을 구하거나 정렬하는 작업이 쉬워짐
  3. 고정된 크기의 연속적인 메모리 할당을 통해 빠른 데이터 접근 가능
    • O(1) 시간 복잡도로 배열 요소 접근 가능 (arr[i] 사용)

2. 특징

  • 고정된 크기 배열을 선언할 때 크기가 정해지며 변경 불가능
  • 같은 타입의 요소 저장 배열에 저장되는 모든 값은 같은 데이터 타입이어야 함
  • 인덱스를 통한 접근 배열의 요소는 0부터 시작하는 인덱스로 접근
  • 연속된 메모리 공간 할당 배열은 연속된 메모리 블록을 차지하여 빠른 접근 속도를 가짐

배열의 메모리 구조

배열은 연속된 메모리 공간을 차지한다.

예를 들어, int[] arr = {10, 20, 30}; 이라면, 메모리 구조는 다음과 같다:

Index:   0    1    2
Value:  10   20   30

arr[0] → 10, arr[1] → 20, arr[2] → 30 에 접근 가능

3. 사용 예시

1. 배열 선언 및 생성

배열 선언

// 정수 배열 선언
int[] numbers;

// 선언과 동시에 생성
int[] numbers = new int[5];  // 크기가 5인 배열 생성

배열 초기화

// 정수 배열 초기화
int[] numbers = {1, 2, 3, 4, 5};

2. 배열 요소 접근 및 변경

int[] numbers = {10, 20, 30};

// 배열 요소 접근
System.out.println(numbers[0]); // 출력: 10

// 배열 요소 변경
numbers[1] = 50;
System.out.println(numbers[1]); // 출력: 50
  • arr[index] 를 사용하여 요소를 읽거나 수정 가능
  • 인덱스는 0부터 시작! (arr[0]이 첫 번째 요소)

3. 배열과 반복문

for 문을 이용한 배열 순회

int[] numbers = {10, 20, 30, 40, 50};

for (int i = 0; i < numbers.length; i++) {
    System.out.println(numbers[i]);
}

향상된 for 문 (for-each)

for (int num : numbers) {
    System.out.println(num);
}
  • for-each 문은 요소를 직접 접근하지만, 인덱스를 사용할 수 없음
  • 요소를 수정해야 한다면 일반 for 문을 사용해야 함

4. 다차원 배열 (2차원 배열)

2차원 배열 선언 및 초기화

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

2차원 배열 요소 접근

System.out.println(matrix[0][1]); // 출력: 2

2차원 배열 반복문

for (int i = 0; i < matrix.length; i++) {
    for (int j = 0; j < matrix[i].length; j++) {
        System.out.print(matrix[i][j] + " ");
    }
    System.out.println();
}
  • 배열이 n x m 형태로 저장됨
  • 중첩 for 문을 사용하여 2차원 배열을 쉽게 순회 가능

4. 배열 관련 주요 API (java.util.Arrays)

Java에서는 java.util.Arrays 클래스를 사용하여 배열을 쉽게 다룰 수 있다.

1. Arrays.toString(): 배열 출력

import java.util.Arrays;

int[] arr = {1, 2, 3, 4, 5};
System.out.println(Arrays.toString(arr)); // [1, 2, 3, 4, 5]

2. Arrays.sort(): 배열 정렬

int[] numbers = {5, 2, 8, 1, 3};
Arrays.sort(numbers);
System.out.println(Arrays.toString(numbers)); // [1, 2, 3, 5, 8]

3. Arrays.fill(): 배열 값 채우기

int[] arr = new int[5];
Arrays.fill(arr, 7);
System.out.println(Arrays.toString(arr)); // [7, 7, 7, 7, 7]

4. Arrays.copyOf(): 배열 복사

int[] original = {1, 2, 3};
int[] copy = Arrays.copyOf(original, 5);
System.out.println(Arrays.toString(copy)); // [1, 2, 3, 0, 0]

5. Arrays.equals(): 배열 비교

int[] a = {1, 2, 3};
int[] b = {1, 2, 3};
System.out.println(Arrays.equals(a, b)); // true

6. Arrays.binarySearch() → 이진 탐색

int[] numbers = {1, 3, 5, 7, 9};
int index = Arrays.binarySearch(numbers, 5);
System.out.println(index); // 2
  • 배열이 정렬된 상태여야 binarySearch()가 정상적으로 동작함!
728x90

'자바' 카테고리의 다른 글

[JAVA] 상속  (0) 2025.03.12
[JAVA] Stream  (0) 2025.03.11
[JAVA] record  (0) 2025.03.11
[JAVA] 오버로딩, 오버라이딩  (0) 2025.03.06
[JAVA] Getter, Setter  (0) 2025.03.06