[자바 기초] 7강. 데이터 아파트 짓기: 배열(Array) 완벽 가이드
지난 시간 복습과 이번 강의 목표
지난 6강에서는 for문을 이용해 똑같은 작업을 수백 번 반복하는 기술을 배웠습니다.
그런데 만약 **"학생 100명의 점수를 저장하고 평균을 내라"**는 미션이 주어지면 어떨까요?
int score1 = 90;
int score2 = 80;
// ... (이걸 100줄 쓰시겠습니까?)
int score100 = 70;
변수 100개를 만드는 것도 힘들지만, 이걸 다 더하려고 score1 + score2 + ... 적는 건 불가능에 가깝습니다.
이럴 때 사용하는 것이 바로 **배열(Array)**입니다. 변수들이 옹기종기 모여 사는 **"데이터 아파트"**를 지어보겠습니다.
1. 배열이란 무엇인가?
배열은 **"같은 자료형의 변수들을 하나의 이름으로 묶어서 관리하는 것"**입니다.
쉽게 말해 **'계란 판'**을 상상하시면 됩니다. 계란(데이터) 30개를 낱개로 들고 다니는 게 아니라, 계란 판(배열) 하나에 담아서 들고 다니는 것이죠.
선언과 생성 (아파트 짓기)
// 방법 1: 빈 방 만들기 (크기 지정)
// "정수(int)가 들어갈 방 5개짜리 아파트를 짓고, 이름은 scores라고 한다."
int[] scores = new int[5];
// 방법 2: 값 채워서 만들기 (초기화)
// "처음부터 값을 넣어서 아파트를 짓는다."
String[] names = {"철수", "영희", "민수"};
int[]: "이건 그냥 정수가 아니라 정수 배열이야"라는 표시입니다.new int[5]: 정수가 들어갈 공간 5칸을 새로 만듭니다.
2. 방 번호의 비밀: 인덱스 (Index)
배열에서 가장 중요한 개념입니다. 아파트에 우편물을 넣으려면 **"호수(방 번호)"**를 알아야겠죠? 이 방 번호를 **인덱스(Index)**라고 부릅니다.
🚨 중요: 자바의 방 번호는 0번부터 시작합니다.
int[] numbers = {10, 20, 30, 40, 50};
System.out.println(numbers[0]); // 첫 번째 방 (10)
System.out.println(numbers[1]); // 두 번째 방 (20)
System.out.println(numbers[4]); // 다섯 번째 방 (50)
- 1번째 데이터는
[0]번 방에 있습니다. - 5번째 데이터는
[4]번 방에 있습니다. - (이거 헷갈려서 에러 내는 경우가 정말 많습니다!)
3. 배열과 반복문의 꿀조합
배열이 강력한 이유는 반복문(for)과 합쳐졌을 때 나타납니다.
방 번호(0, 1, 2...)가 숫자로 되어 있으니, for문의 i를 방 번호로 쓰면 딱 맞거든요.
배열의 길이: .length
배열이 몇 칸짜리인지 일일이 셀 필요 없습니다. 배열이름.length라고 쓰면 알아서 알려줍니다.
int[] scores = {90, 85, 77, 60, 95};
// i는 0부터 4(길이보다 작을 때)까지 돕니다.
for (int i = 0; i < scores.length; i++) {
System.out.println((i + 1) + "번 학생 점수: " + scores[i]);
}
4. 실전 예제: 반 평균 구하기
자, 이제 변수 100개 노가다에서 탈출해 봅시다. 학생 5명의 점수를 배열에 넣고, 총점과 평균을 구하는 프로그램입니다.
src/Main.java에 작성해 보세요.
public class Main {
public static void main(String[] args) {
// 1. 점수 배열 생성 (데이터 아파트)
int[] scores = {90, 80, 75, 100, 60};
// 2. 총점을 담을 변수 (누적해야 하니 0으로 시작)
int sum = 0;
// 3. 반복문으로 배열 돌면서 더하기
for (int i = 0; i < scores.length; i++) {
// scores[0], scores[1]... 순서대로 꺼내서 sum에 더함
sum = sum + scores[i];
// 과정 확인용 로그
System.out.println((i + 1) + "번 학생 점수 " + scores[i] + "점 반영 완료");
}
// 4. 평균 구하기 (총점 / 학생수)
// 정확한 소수점을 위해 (double)로 변환
double average = (double) sum / scores.length;
System.out.println("-----------------------");
System.out.println("총점: " + sum + "점");
System.out.println("반 평균: " + average + "점");
}
}
실행 결과
1번 학생 점수 90점 반영 완료
2번 학생 점수 80점 반영 완료
3번 학생 점수 75점 반영 완료
4번 학생 점수 100점 반영 완료
5번 학생 점수 60점 반영 완료
-----------------------
총점: 405점
반 평균: 81.0점
변수 5개를 따로 만들었으면 코드가 엄청 길어졌겠지만, 배열 덕분에 아주 깔끔해졌죠? 100명이어도 scores 안에 숫자만 더 넣으면 코드는 고칠 필요가 없습니다.
5. 자주 하는 실수 (공포의 빨간 글씨)
배열을 쓰다 보면 무조건 한 번은 보게 되는 에러가 있습니다.
ArrayIndexOutOfBoundsException (배열 인덱스가 범위를 벗어났다)
int[] arr = new int[3]; // 방은 3개 (0번, 1번, 2번)
arr[3] = 100; // 에러 발생!
- 이유: 방이 3개면 번호는
0, 1, 2입니다.3번방은 없습니다. (4번째 방을 뜻하니까요) - 해결: 항상 **"인덱스는 0부터 시작해서 (길이 - 1)에서 끝난다"**는 것을 기억하세요.
6. 마무리
이제 여러분은 데이터를 하나씩 다루는 수준을 넘어, 대량의 데이터를 한 번에 처리하는 능력을 갖췄습니다. 여기까지가 자바의 절차지향(순서대로 실행) 기초 문법이었습니다.
하지만 자바의 진짜 힘은 **객체지향(Object Oriented Programming)**에서 나옵니다.
지금까지는 모든 코드를 main 안에 다 때려 넣었지만, 프로그램이 커지면 기능을 부품(객체)으로 쪼개서 조립해야 합니다.
다음 **[8강]**에서는 붕어빵 틀과 붕어빵의 관계, 클래스(Class)와 객체에 대해 배워보겠습니다. 난이도가 조금 올라가지만, 이걸 알면 진짜 개발자가 되는 겁니다.