1. 배열이란?
- 변수 : 물건 하나만 올려두는 선반
- 배열 : 칸이 나눠진 냉장고 (칸마다 같은 종류 보관)
즉, 같은 타입의 값 여러 개를 하나의 이름으로 묶어서 관리하는 구조
- 순서 O
- 연속된 공간에 저장 (Memory에 일렬로 저장)
- 인덱스로 접근 (0부터 번호가 매겨짐)
값들에 빠르게 접근하고 싶을 때 사용
자료형[] 배열이름 = new 자료형[크기];
배열이름 : 배열을 식별할 수 있는 이름
new 자료형[크기] : 실제 메모리 공간 할당 (크기는 정수값)
// 방법 1 : 선언과 동시에 값 초기화
int[] numbers = {1, 2, 3, 4, 5};
// 방법 2 : 크기만 지정 후 나중에 값 넣기
int[] numbers = new int[5];
numbers[0] = 1;
numbers[1] = 2;
numbers = {1, 2, 3, 4, 5}
인덱스 : [0] [1] [2] [3] [4]
값 : 1 2 3 4 5
- 마지막 인덱스는 배열 크기 - 1
- numbers.length → 배열 전체 크기 반환
2. 기본 예제
public class ArrayExample1 {
public static void main(String[] args) {
// 정수형 배열 선언과 초기화
int[] numbers = {1, 2, 3, 4, 5};
// 배열 요소 출력
for (int i = 0; i < numbers.length; i++) {
System.out.println("numbers[" + i + "] = " + numbers[i]);
}
}
}
- numbers.length로 배열 크기 확인하며 반복문으로 순회
- numbers[i]로 각 인덱스 요소 접근해 출력
- 인덱스 범위 벗어나면 ArrayIndexOutOfBoundsException 발생
numbers[0] = 1
numbers[1] = 2
numbers[2] = 3
numbers[3] = 4
numbers[4] = 5
public class ArraySumExample {
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5};
int sum = 0;
for (int num : arr) {
sum += num;
}
System.out.println("배열 요소의 합: " + sum);
}
}
- int sum = 0; → 합계 저장할 변수 0으로 초기화
- for (int num : arr) → 향상된 for문으로 배열 요소를 하나씩 꺼냄
- sum += num; → 꺼낸 요소를 합계에 누적
배열 요소의 합: 15
| 구분 | 일반 for문 | 향상된 for문 |
|---|---|---|
| 인덱스 접근 | O | X |
| 코드 간결함 | 보통 | 깔끔함 |
| 사용 추천 | 인덱스 필요할 때 | 전체 순회할 때 |
// 일반 for문
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
// 향상된 for문
for (int num : arr) {
System.out.println(num);
}
3. 자주 나오는 오류 TOP 3
int[] arr = {1, 2, 3};
System.out.println(arr[3]);
배열의 유효 인덱스는 0부터 arr.length - 1까지.
위 코드는 3칸짜리 배열에서 arr[3]을 접근하려 해서 오류
System.out.println(arr[arr.length - 1]);
int[] arr = null;
System.out.println(arr.length);
배열이 실제로 생성되지 않았는데 .length나 [0] 등을 쓰면 오류 발생
int[] arr = new int[3];
System.out.println(arr.length);
int[] arr;
arr[0] = 10;
arr은 참조만 되어 있고 실제 배열 공간은 없음.
메모리 공간이 없는데 값을 넣으려고 하니 오류 발생
int[] arr = new int[3];
arr[0] = 10;
4. 핵심 요약
- 인덱스는 0부터 시작
- 마지막 인덱스는 length - 1
- .length로 배열 크기 확인
- 인덱스 필요하면 일반 for문 사용
- 전체 순회만 하면 향상된 for문 사용
- 같은 타입 데이터를 여러 개 다룰 때 매우 유용