포스트

JAVA (4) - 배열

JAVA (4) - 배열

1. 개요

배열(Array)은 같은 타입의 변수를 여러 개 묶어서 하나의 단위로 관리하는 자료구조다. 데이터의 수가 많아질 때 변수를 일일이 선언하는 대신 하나의 배열 변수를 통해 연속된 메모리 공간에 데이터를 저장하고 효율적으로 관리할 수 있다.

Java에서 int 자체는 기본 타입(Primitive Type)이지만, 이를 묶은 배열(int[])은 참조 타입(Reference Type)에 속하며 힙(Heap) 메모리 영역에 생성되는 객체다.


2. 배열의 선언과 생성

Java에서 배열을 사용하려면 변수를 선언하고, new 연산자를 이용해 메모리를 할당받아야 한다.

2.1 배열 선언

1
2
3
int[] score;   // 가장 일반적으로 사용되는 방식
int score2[];  // C언어 스타일 (Java에서도 허용)

2.2 배열 생성 및 초기화

배열은 생성 시 각 요소가 타입별 기본값(int0, booleanfalse, 참조 타입은 null)으로 자동 초기화된다.

1
2
3
4
5
6
7
8
9
10
11
// 1. 크기 지정 후 생성 (기본값 0으로 초기화)
int[] numbers = new int[5]; 

// 2. 값 대입
numbers[0] = 10;
numbers[1] = 20;

// 3. 선언과 동시에 값으로 초기화 (가장 많이 사용)
int[] scores = { 90, 85, 95, 70, 100 };
int[] ages = new int[]{ 20, 25, 30 };


3. 배열 요소 접근과 length

3.1 인덱스(Index)

배열의 각 요소는 0부터 시작하는 인덱스를 통해 접근한다.

  • 첫 번째 요소: array[0]
  • 마지막 요소: array[array.length - 1]

주의: 배열의 범위를 벗어난 인덱스에 접근하려 하면 ArrayIndexOutOfBoundsException 예외가 발생한다.

3.2 배열 길이 (length)

length 필드를 사용하면 배열의 크기(요소 개수)를 가져올 수 있다. 이는 for 문 등 반복문 처리 시 유용하다.

1
2
3
4
5
6
7
8
9
10
11
12
int[] numbers = {10, 20, 30, 40, 50};

// 일반 for 문 사용
for (int i = 0; i < numbers.length; i++) {
    System.out.println("numbers[" + i + "] = " + numbers[i]);
}

// 향상된 for 문 (Enhanced for) 사용
for (int num : numbers) {
    System.out.println(num);
}


4. 2차원 배열 (Multi-Dimensional Array)

행과 열로 구성된 매트릭스 형태로 데이터를 관리할 때 2차원 배열을 사용한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 2행 3열 2차원 배열 선언
int[][] matrix = new int[2][3];

// 2차원 배열 값 지정 초기화
int[][] arr = {
    { 1, 2, 3 },
    { 4, 5, 6 }
};

// 중첩 for 문을 이용한 탐색
for (int i = 0; i < arr.length; i++) { // 행 반복
    for (int j = 0; j < arr[i].length; j++) { // 열 반복
        System.out.print(arr[i][j] + " ");
    }
    System.out.println();
}


5. 배열의 복사

Java에서 배열은 생성 후 크기를 변경할 수 없다. 더 큰 크기의 배열이 필요할 때는 기존 배열의 요소를 새로운 배열로 복사해야 한다.

5.1 System.arraycopy()

가장 효율적인 방식의 배열 복사 메서드다.

1
2
3
4
5
6
7
int[] oldArray = { 1, 2, 3 };
int[] newArray = new int[5];

// System.arraycopy(원본, 원본시작위치, 대상, 대상시작위치, 복사개수)
System.arraycopy(oldArray, 0, newArray, 0, oldArray.length);
// newArray 결과: [1, 2, 3, 0, 0]

5.2 Arrays.copyOf()

java.util.Arrays 클래스에서 제공하며 지정한 길이만큼 복사된 새 배열을 반환한다.

1
2
3
4
5
6
import java.util.Arrays;

int[] oldArray = { 1, 2, 3 };
int[] newArray = Arrays.copyOf(oldArray, 5); 
// newArray 결과: [1, 2, 3, 0, 0]


6. 정리

  1. 배열은 동일한 타입의 연관 데이터를 효율적으로 저장하고 취급하는 연속적 메모리 공간이다.
  2. 인덱스는 0부터 시작하며, 배열의 길이는 .length로 확인할 수 있다.
  3. 배열은 크기를 가변적으로 바꿀 수 없으므로, 데이터 변경이 잦거나 가변적인 크기가 필요할 때에는 ArrayList 등의 컬렉션 프레임워크를 활용해야 한다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.