프로그래밍에서 가장 자주 부딪히는 문제 중 하나는 데이터의 집합을 어떻게 다룰 것인가이다. 변수를 일일이 선언하면 불필요한 중복이 생기고 유지보수도 어렵다. 이 문제를 해결하는 것이 바로 배열(Array)이다.
배열이 필요한 이유
int student1 = 90;
int student2 = 80;
int student3 = 70;
int student4 = 60;
int student5 = 50;
- 학생이 늘어나면 변수를 무한정 늘려야 하고, 출력도 반복문을 사용할 수 없다.
- 동일한 타입의 데이터를 묶어 효율적으로 관리하기 위해 배열이 필요하다.
배열 선언과 생성
int[] students; // 배열 변수 선언
students = new int[5]; // 배열 생성
- int[] students → 배열 변수를 선언 (아직 메모리에 배열이 만들어진 것은 아님)
- new int[5] → int 5개를 저장할 수 있는 배열 생성
- 배열의 참조값(주소)을 반환 → 변수 students가 이 주소를 보관
- 배열 생성 시 기본값 자동 초기화
- 숫자 → 0
- boolean → false
- 참조형(String 등) → null
배열 사용 (인덱스)
students[0] = 90;
students[1] = 80;
System.out.println(students[0]); // 90
- 인덱스(Index): 배열의 위치(0부터 시작)
- 범위를 벗어나면 ArrayIndexOutOfBoundsException이 발생한다.
기본형 vs 참조형
- 기본형: 값을 직접 저장 (int, long, double, boolean)
- 참조형: 값이 아닌 참조값(주소) 저장 (int[], String, 객체 등)
배열은 참조형이므로, 변수는 배열의 "주소"를 담고 있고 실제 데이터는 별도의 메모리 공간에 저장된다.
배열 리팩토링
(1) 반복문과 length 활용
for (int i = 0; i < students.length; i++) {
System.out.println("학생" + (i+1) + " 점수: " + students[i]);
}
- students.length → 배열의 길이 반환
- 코드 중복 제거 → 유지보수성 ↑
(2) 초기화 단축 문법
int[] students = {90, 80, 70, 60, 50};
배열 선언과 동시에 값 설정 가능
2차원 배열
int[][] arr = { {1, 2, 3}, {4, 5, 6} };
System.out.println(arr[0][1]); // 2
- arr[row][column] 형식
- arr.length → 행(row) 길이
- arr[row].length → 열(column) 길이
반복문으로 출력
for (int row = 0; row < arr.length; row++) {
for (int col = 0; col < arr[row].length; col++) {
System.out.print(arr[row][col] + " ");
}
System.out.println();
}
향상된 for문 (for-each)
int[] numbers = {1, 2, 3, 4, 5};
for (int number : numbers) {
System.out.println(number);
}
- 배열 요소를 순서대로 읽기 편리하다.
- 단, 인덱스 필요할 때는 일반 for문 사용해야 한다.
정리하자면...
- 배열은 같은 타입의 데이터를 묶어 효율적으로 관리한다.
- 인덱스는 0부터 시작하며, .length로 길이를 확인할 수 있다.
- 2차원 배열은 arr[row][column] 구조이다.
- 향상된 for문으로 간단하게 순회할 수 있다.
- 배열을 활용하면 점수 계산, 데이터 관리, 간단한 프로그램 구현까지 가능하다.
배열은 자바에서 가장 기본적이면서도 강력한 데이터 구조이다.
이후 학습할 컬렉션(List, Set, Map)의 기초가 되므로 반드시 손에 익혀야 한다.
'java' 카테고리의 다른 글
| Java 클래스와 데이터 정리 (0) | 2025.09.11 |
|---|---|
| Java 메서드(Method) 정리 (0) | 2025.09.10 |
| Java 스코프(Scope)와 형변환(Type Casting) 정리 (0) | 2025.09.09 |
| Java 반복문(Loop) 정리 (0) | 2025.09.09 |
| Java 조건문(Conditional Statements) 정리 (0) | 2025.09.09 |