본문 바로가기
Programming Language/Java

[Java/개념] 데이터 타입 - 배열 타입(Array type)

by woongii 2024. 10. 10.

1. 배열이란?

배열(Array)은 동일한 타입의 여러 값을 고정된 크기로 저장할 수 있는 자료 구조이다. 배열은 인덱스를 사용하여 각 요소에 접근하며, 자바에서 배열은 객체로 취급된다. 배열은 주로 데이터를 효율적으로 관리하거나 반복 작업을 처리할 때 사용된다.

2. 배열의 특징

  • 고정된 크기: 배열은 선언할 때 크기가 고정되며, 한 번 설정된 배열의 크기는 변경할 수 없다.
  • 동일한 데이터 타입: 배열은 하나의 데이터 타입(예: int, double, String)으로 구성된 요소들만 가질 수 있다.
  • 인덱스 접근: 배열 요소는 0부터 시작하는 인덱스를 통해 접근할 수 있다. 첫 번째 요소는 array[0], 두 번째 요소는 array[1]과 같이 접근한다.
  • 객체: 자바에서 배열은 객체로 취급되며, 배열 변수는 배열 객체를 참조한다.

3. 1차원 배열

1) 배열 선언 및 생성

배열은 선언 후 나중에 생성하거나, 선언과 동시에 생성할 수 있다.

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

2) 배열 초기화

  • 배열 선언과 동시에 값 초기화
int[] arr = {1, 2, 3, 4, 5};  // 크기 5 배열 생성과 값 초기화
  • new 키워드를 사용한 초기화
int[] arr = new int[] {1, 2, 3, 4, 5};  // 명시적으로 new를 사용한 초기화

4. 2차원 배열

2차원 이상의 배열을 다차원 배열이라고 하며, 주로 행렬과 같은 데이터를 표현할 때 사용된다.

1) 2차원 배열 선언 및 생성

  • 배열 선언 후 크기 지정
int[][] matrix;
matrix = new int[3][3];  // 3x3 크기의 2차원 배열 생성

 

  • 선언과 동시에 생성
int[][] matrix = new int[3][3];  // 크기 3x3 배열 생성

 

2) 2차원 배열 초기화

  • 선언과 동시에 초기화
int[][] matrix = {
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9}
};  // 2차원 배열 초기화

2차원 배열의 각 행은 개별적인 배열로 구성되어 있으며, 해당 배열의 인덱스를 통해 접근할 수 있다.

 

[예시 코드]

public class ArrayTest {
    public static void main(String[] args) {
        int[][] num = {
            {10, 11, 12},
            {20, 21, 22}
        };
        int total = 0;

        System.out.println("num 배열 길이: " + num.length);  // 행의 개수 출력
        System.out.println("num[0] 배열 길이: " + num[0].length);  // 열의 개수 출력

        for (int i = 0; i < num.length; i++) {
            for (int j = 0; j < num[i].length; j++) {
                total += num[i][j];
                System.out.println("num[" + i + "][" + j + "] : " + num[i][j]);
            }
        }
        System.out.println("num 배열의 총합: " + total);
    }
}

5. Arrays 클래스 (java.util.Arrays)

Arrays 클래스는 배열을 쉽게 다룰 수 있도록 다양한 메서드를 제공한다. 정렬, 검색, 출력, 비교 등의 작업을 효율적으로 수행할 수 있다.

1) 배열 출력

  • 1차원 배열 출력
int[] arr = {1, 2, 3, 4, 5};
System.out.println(Arrays.toString(arr));  // 출력: [1, 2, 3, 4, 5]
  • 2차원 배열 출력
int[][] arr2D = {{1, 2, 3}, {4, 5, 6}};
System.out.println(Arrays.deepToString(arr2D));  // 출력: [[1, 2, 3], [4, 5, 6]]

 

2) 배열 정렬

  • 1차원 배열 정렬
int[] arr = {3, 5, 1, 4, 2};
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));  // 출력: [1, 2, 3, 4, 5]
  • 2차원 배열의 특정 행 정렬
int[][] arr2D = {{5, 2, 3}, {8, 6, 1}};
Arrays.sort(arr2D[0]);  // 첫 번째 행만 정렬
System.out.println(Arrays.deepToString(arr2D));  // 출력: [[2, 3, 5], [8, 6, 1]]

 

3) 배열 비교

  • 1차원 배열 비교
int[] arr1 = {1, 2, 3};
int[] arr2 = {1, 2, 3};
System.out.println(Arrays.equals(arr1, arr2));  // 출력: true
  • 2차원 배열 비교
int[][] arr2D_1 = {{1, 2, 3}, {4, 5, 6}};
int[][] arr2D_2 = {{1, 2, 3}, {4, 5, 6}};
System.out.println(Arrays.deepEquals(arr2D_1, arr2D_2));  // 출력: true

 

4) 배열 복사

  • 얕은 복사
int[] original = {1, 2, 3};
int[] shallowCopy = original;  // 얕은 복사
shallowCopy[0] = 10;
System.out.println(Arrays.toString(original));  // 출력: [10, 2, 3] (원본도 변경됨)
  • 깊은 복사
int[] original = {1, 2, 3};
int[] deepCopy = Arrays.copyOf(original, original.length);  // 깊은 복사
deepCopy[0] = 10;
System.out.println(Arrays.toString(original));  // 출력: [1, 2, 3]

 

 

 

 

 

 

 

[출처: https://blog.hexabrain.net/112, https://olrlobt.tistory.com/34,https://velog.io/@3rd-big/JAVA-%EB%B0%B0%EC%97%B4Array]