JAVA

자바 배열 — 값 여러 개를 한 줄로 세우는 법(ARRAY·인덱스·length)

PANCO_IT
#자바#JAVA#배열#array#인덱스

변수 다섯 개를 따로 만드는 경우와 배열 하나로 묶는 경우를 비교한 그림

값이 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입니다.

길이 5인 배열의 인덱스 구조: 첫 칸은 0번, 마지막 칸은 4번

그림 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 규칙만 지키면 대표 오류의 대부분을 피할 수 있습니다.

미니 퀴즈

개념을 제대로 잡았는지 직접 풀어 봅니다. 정답은 눌러야 나옵니다.

미니 퀴즈

OX 2문제 + 4지선다 3문제


포켓코딩(JAVA2) 5편 · 예제 출처: 강사 개인 GitHub 저장소. 다음 편: static — 객체 없이 쓰는 공용 멤버.

PANCO_IT

IT 지식을 정리하는 개발자

관련 글