본문 바로가기
Back-End/Java

배열 선언과 생성 이해하기

by 두두리안 2024. 10. 26.
728x90
int[] students; // 1. 배열 변수 선언
students = new int[5]; // 2. 배열 생성

1. 배열 변수 선언

int[] students; 는 배열 변수를 선언하는 방법입니다. 일반 변수와의 차이점은 int 타입 뒤에 대괄호 [] 가 들어간다는 점입니다. 이 선언으로 배열이 실제로 만들어지는 것은 아니며, 배열을 담을 수 있는 변수를 만드는 것입니다.

2. 배열 생성

배열 변수를 선언한 후, new int[5]; 구문으로 실제 배열을 생성합니다. 여기서 int[5] 는 int 타입의 변수를 5개 만들겠다는 의미입니다. 즉, 5개의 int 변수를 연속으로 생성하여 하나의 배열로 관리할 수 있게 됩니다.

배열의 특징

배열은 같은 타입의 데이터를 묶어 관리하기 때문에 데이터 개수가 많아질수록 유용합니다. 그리고 인덱스를 사용하여 각 요소에 접근할 수 있기 때문에 데이터의 위치에 따라 빠르게 접근이 가능합니다.

students[0] = 90; // 학생1 점수 대입
students[1] = 80; // 학생2 점수 대입
System.out.println("학생1 점수: " + students[0]);
System.out.println("학생2 점수: " + students[1]);

배열의 인덱스

배열은 0부터 시작합니다. 따라서 students[4] 는 배열의 마지막 요소가 됩니다. 예를 들어 students[5] 와 같이 배열 범위를 넘어서는 인덱스를 사용하면 ArrayIndexOutOfBoundsException 오류가 발생합니다.

기본형과 참조형의 차이

자바의 데이터 타입은 크게 기본형(Primitive Type) 과 참조형(Reference Type) 으로 나뉩니다.

  • 기본형: int, double, boolean 등으로, 값 자체를 저장합니다.
  • 참조형: 배열이나 객체로, 값이 저장된 메모리 주소(참조값)를 저장합니다.
    배열은 참조형에 속하기 때문에 참조값을 통해 배열의 위치에 접근하게 됩니다.

Java 배열 리팩토링은 코드의 가독성, 재사용성, 유지보수를 용이하게 만드는 데 중요한 역할을 합니다. 아래의 예제에서 여러 단계를 거쳐 코드의 효율성을 높였습니다.

3. 기본 배열 선언 및 사용

int[] students = {90, 80, 70, 60, 50};
for (int i = 0; i < students.length; i++) {
    System.out.println("학생" + (i + 1) + " 점수: " + students[i]);
}

위 코드에서는 for문을 통해 반복적으로 배열의 값을 출력합니다. students.length를 사용하여 배열의 크기를 유연하게 관리할 수 있어 배열이 길어져도 코드 수정 없이 작동합니다.

4. 2차원 배열 - 기본 선언 및 사용

2차원 배열은 행(row)과 열(column)로 구성되며, 다음과 같이 선언하고 사용할 수 있습니다:

int[][] arr = new int[2][3]; // 2x3 2차원 배열
arr[0][0] = 1;
arr[0][1] = 2;
arr[0][2] = 3;
arr[1][0] = 4;
arr[1][1] = 5;
arr[1][2] = 6;

이 코드는 각 배열 위치에 직접 값을 넣습니다. 반복문을 사용하지 않고 모든 값을 하나씩 설정해야 하므로 비효율적입니다.

5. 2차원 배열 리팩토링 - 행 출력 반복

for문을 사용하여 반복적으로 행을 출력합니다.

for (int row = 0; row < arr.length; row++) {
    System.out.print(arr[row][0] + " ");
    System.out.print(arr[row][1] + " ");
    System.out.print(arr[row][2] + " ");
    System.out.println(); // 행이 끝나면 줄바꿈
}

6. 2차원 배열 리팩토링 - 열 출력 반복 추가

열 출력 또한 for문을 사용해 효율성을 높입니다.

for (int row = 0; row < arr.length; row++) {
    for (int column = 0; column < arr[row].length; column++) {
        System.out.print(arr[row][column] + " ");
    }
    System.out.println();
}

이제 행과 열을 모두 반복문으로 처리하여 코드가 간결해졌고, 배열 크기가 변경되더라도 수정할 필요 없이 유연하게 동작합니다.

실행 결과

1 2 3
4 5 6

이와 같이 리팩토링을 통해 코드의 유지보수성과 가독성을 크게 개선할 수 있으며, 다른 배열 크기에도 쉽게 적용할 수 있습니다.

마무리하며: 배열의 장점

배열을 사용하면 메모리를 효율적으로 사용하고, 코드의 가독성과 관리성을 높일 수 있습니다. 특히 데이터가 많아질수록 배열을 통해 반복적인 작업을 줄일 수 있으며, 배열의 동적 할당 기능 덕분에 배열 크기를 상황에 맞게 조절할 수도 있습니다.

배열을 활용하는 방법을 이해했다면, 앞으로 다룰 더 복잡한 데이터 구조나 객체 지향 프로그래밍에서도 배열을 유연하게 활용할 수 있을 것입니다.

728x90