[Java] 배열

손주현·2025년 4월 4일
0

Java 기초

목록 보기
10/13
post-thumbnail

배열이 필요한 이유

많은 양의 데이터를 효율적으로 다루기 위해 배열(Array)을 사용

예를 들어 학생 5명의 점수를 관리한다고 할 때, 배열이 없다면 이렇게 작성해야 한다.

int student1 = 90;
int student2 = 80;
int student3 = 70;
int student4 = 60;
int student5 = 50;
  • 학생 수가 많아질수록 코드가 선언 + 출력 모두 비효율적
  • 비슷한 변수 이름 반복, 반복문 적용 불가 → 유지보수 어려움

배열의 선언과 생성

int[] students;             // 배열 변수 선언
students = new int[5];      // 배열 생성
  • int[] → int형 배열을 의미
  • new int[5] → int 5개짜리 배열 생성
  • 배열 생성 시 자바가 자동으로 초기화해준다.
    • 숫자는 0, boolean은 false, String(문자열)은 null로 초기화 된다.

배열 참조의 개념

배열은 참조형(reference type)이다.
즉, 변수는 배열이 저장된 메모리 주소(참조값)를 가지고 있다.

int[] students = new int[5]; //1. 배열 생성
int[] students = x001; //2. new int[5]의 결과로 x001 참조값 반환
students = x001 //3. 최종 결과

x001은 배열의 주소이고, 이를 통해 배열에 접근한다.

  • 실제 배열의 참조값을 출력하면 다음과 같이 나온다.
System.out.println(students);
//출력 결과: `[I@16f65612` (int형 배열의 참조값)

[I@4617c264 @앞의 [I는 int형 배열을 뜻한다. @뒤에 16진수는 참조값을 뜻한다.


인덱스

  • 배열은 변수와 사용법이 비슷한데, 차이점이 있다면 다음과 같이 []사이에 숫자 번호를 넣어주면 된다.
  • 배열의 위치를 나타내는 숫자를 인덱스(index)라 한다.

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

배열은 0부터 시작한다

  • new int[5]와 같이 5개의 요소를 가지는 int형 배열을 만들었다면 인덱스는 0,1,2,3,4가 존재한다.
  • 여기서 주의해야 할 점이 있는데 인덱스는 0부터 시작한다는 것이다. 배열의 요소를 5개로 생성했지만, 인덱스는 0부터 시작한다.
  • 따라서 사용 가능한 인덱스의 범위는 0 ~ (n-1)이 된다. 그래서 students[4]가 배열의 마지막 요소이
    다.
  • 만약 students[5]와 같이 접근 가능한 배열의 인덱스 범위를 넘어가면 오류가 발생한다.

배열 초기화

  • 앞서 배열을 생성하면 자바가 자동으로 초기화해준다고 소개를 했다.
  • 배열 생성 후 값을 대입하려면 아래와 같이 해야한다.
    이 경우 코드가 늘어나는 단점이 생긴다.
int[] students;             // 배열 변수 선언
students = new int[5];      // 배열 생성
// 초기화된 배열: {0, 0, 0, 0, 0}

// 배열에 값 대입
students[0] = 90;
students[1] = 80;
students[2] = 70;
students[3] = 60;
students[4] = 50;
  • 생성과 동시에 값을 대입해보자
int[] student; // 배열 선언
students = new int[]{90, 80, 70, 60, 50}; // 배열 생성과 초기화
  • 선언과 동시에 생성 및 초기화도 가능
int[] students = new int[]{90, 80, 70, 60, 50};
// 또는
int[] students = {90, 80, 70, 60, 50};

2차원 배열

2차원 배열은 행(row)과 열(column)로 구성된 배열

  • 2차원 배열 선언과 생성
int[][] arr = new int[2][3];
arr[0][0] = 1;  // 1행 1열
  • 2차원 배열 초기화
int[][] arr = {
	{1,2,3},
    {4,5,6}
}; //행2, 열3
  • 2차원 배열 출력
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(); //한 행이 끝나면 라인을 변경
}

Enhanced For Loop

배열 요소를 처음부터 끝까지 순회할 때 사용
각각의 요소를 탐색한다는 의미로 for-each문이라고도 많이 부른다.

향상된 for문 정의

for (변수 : 배열 또는 컬렉션) {
  // 배열 또는 컬렉션의 요소를 순회하면서 수행할 작업
}

예제

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

// Enhanced For 문, for-each문
for (int number : numbers) {
	System.out.println(number);
}
  • 인덱스가 필요 없는 경우에 코드가 훨씬 깔끔해짐
  • 인덱스를 활용해야 할 경우에는 일반 for문을 사용해야 함
profile
Clarinetist.dev

0개의 댓글