
값이 100개가 되어도 배열이라면 이름은 하나, 번호만 늘어납니다.
4편에서 Dog 객체의 필드를 캡슐화로 안전하게 만들었습니다. 그런데 강아지가 다섯 마리라면 어떨까요. d1, d2, d3... 변수를 줄줄이 만들다 보면, 점수 다섯 개·이름 열 개처럼 같은 종류의 값이 여럿일 때마다 변수를 새로 만드는 게 얼마나 번거로운지 금방 느끼게 됩니다. 이 문제를 푸는 것이 오늘의 주제, 배열입니다.
배열이 뭔가요?
배열은 같은 타입의 값 여러 개를 번호 붙은 칸에 나란히 담는 상자 묶음입니다. 이름은 하나만 짓고, 각 칸은 번호(인덱스)로 구분합니다.
쉽게 — 학교 사물함과 같습니다. 사물함마다 이름표를 붙이지 않고, 한 줄로 세워 놓고 0번, 1번, 2번… 번호를 매기죠. "3번 칸에 넣어 줘"라고 하면 끝입니다. 배열이 바로 이 번호 달린 사물함 한 줄입니다.
만들고, 넣고, 꺼내기
배열은 두 가지 방법으로 만듭니다. 칸만 먼저 만들거나, 값과 함께 만들거나.
int[] scores = new int[5]; // 방법 1: int 5칸짜리 배열(모두 0으로 시작)
scores[0] = 90; // 0번 칸에 90을 넣음
scores[1] = 85;
int[] scores2 = {90, 85, 70, 95, 60}; // 방법 2: 값과 함께 한 번에
꺼낼 때도 번호를 씁니다. scores2[2]는 세 번째 칸의 70입니다. 타입 뒤의 대괄호 int[]가 "int가 여러 개 든 배열"이라는 표시입니다.
인덱스는 0부터 — 자바 세계의 약속
배열에서 초보가 가장 헷갈리는 지점입니다. 첫 칸의 번호는 1이 아니라 0입니다.

그림 1. 길이 5인 배열의 칸 번호는 0~4입니다. 마지막 칸은 항상 "길이 - 1"입니다.
그래서 길이 5인 배열의 마지막 칸은 scores[4]입니다. "마지막 인덱스 = 길이 - 1"이라는 공식만 기억하면 헷갈리지 않습니다.
length와 반복문 — 배열의 진짜 힘
배열의 칸 수는 배열이름.length로 알 수 있습니다. 그리고 이 길이와 반복문을 묶는 순간, 배열의 진짜 힘이 나옵니다.
int[] scores = {90, 85, 70, 95, 60};
for (int i = 0; i < scores.length; i++) { // 0번부터 마지막 칸까지
System.out.println(scores[i]);
}
for (int s : scores) { // 더 간단한 for-each: 칸을 하나씩 s에 담아줌
System.out.println(s);
}
값이 5개든 100개든 코드는 그대로입니다. 조건을 i < scores.length로 써 두면 배열 길이가 바뀌어도 반복문을 고칠 필요가 없습니다. 번호가 필요 없고 값만 차례로 쓰면 되는 경우라면 아래의 for-each 쪽이 더 짧고 실수도 적습니다.
직접 실행해 보기
점수 배열에서 평균과 최고점을 구하는 코드입니다. 배열 값을 바꿔 보고, 최저점을 구하는 코드도 직접 추가해 보세요.
public class Main {
public static void main(String[] args) {
int[] scores = {90, 85, 70, 95, 60};
int sum = 0;
int max = scores[0]; // 첫 칸을 기준으로 시작
for (int s : scores) {
sum += s; // 합계 누적
if (s > max) {
max = s; // 더 큰 값을 만나면 교체
}
}
System.out.println("평균: " + (sum / scores.length)); // 80
System.out.println("최고점: " + max); // 95
}
}📱 코드 실행(실습)은 태블릿·PC에서 이용할 수 있어요. 모바일에서는 위 코드를 눈으로 따라가며 확인하세요.
단골 함정 — 없는 칸을 부르면 프로그램이 멈춘다
길이 5인 배열에서 scores[5]를 부르면 어떻게 될까요. 컴파일은 통과하지만, 실행하는 순간 오류가 나면서 프로그램이 멈춥니다.
int[] scores = new int[5];
System.out.println(scores[5]);
// 실행 오류: ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5
ArrayIndexOutOfBoundsException(배열 범위를 벗어난 인덱스)은 자바 초보가 가장 자주 만나는 실행 오류입니다. 이 메시지가 보이면 "없는 칸 번호를 불렀구나"라고 읽으면 됩니다. 대부분 반복문 조건을 i <= scores.length처럼 등호까지 넣어서 생깁니다. 조건은 항상 i < scores.length, 즉 등호 없이 씁니다.
하나 더. 배열의 길이는 scores.length처럼 괄호 없이, 문자열의 길이는 name.length()처럼 괄호를 붙여 씁니다. 배열은 length가 값(필드)이고 문자열은 기능(메서드)이라 표기가 다릅니다. 괄호 유무로 오류가 나면 이 차이를 떠올리세요.
한 장 정리
| 항목 | 내용 |
|---|---|
| 배열 | 같은 타입 값 여러 개를 번호 붙은 칸에 담는 묶음 |
| 만들기 | new int[5] 또는 {90, 85, 70} |
| 인덱스 | 0부터 시작, 마지막은 길이 - 1 |
| 길이 | 배열.length (문자열은 length()) |
| 대표 오류 | 없는 칸 접근 → ArrayIndexOutOfBoundsException |
이것만 기억하면 됩니다. 배열은 번호(0부터) 달린 사물함 한 줄입니다. length와 반복문을 묶으면 값이 몇 개든 한 번에 처리할 수 있고, 반복 조건에서 등호 없는 i < length 규칙만 지키면 대표 오류의 대부분을 피할 수 있습니다.
미니 퀴즈
개념을 제대로 잡았는지 직접 풀어 봅니다. 정답은 눌러야 나옵니다.
미니 퀴즈
포켓코딩(JAVA2) 5편 · 예제 출처: 강사 개인 GitHub 저장소. 다음 편: static — 객체 없이 쓰는 공용 멤버.