프로그램을 작성하다 보면 같은 타입의 변수를 여러 개 다뤄야 하는 상황이 자주 발생한다.
예를 들어 학생 5명의 점수를 저장해야 한다면 `int student1`, `int student2`와 같은 변수를 계속 만들어야 한다.
이런 방식은 비효율적이며 관리도 어렵다.
자바에서는 이러한 문제를 해결하기 위해 배열(Array)이라는 개념을 제공한다.
배열 변수 선언
배열을 사용하기 위해 가장 먼저 해야 할 일은 배열 변수 선언이다.
int[] students;
일반 변수와의 가장 큰 차이점은 타입 뒤에 대괄호`[ ]`가 붙는다는 점이다.
- `int a` → 정수 하나를 담는 변수
- `int[] students` → 정수 배열을 가리키는 변수
여기서 중요한 점은 배열 변수를 선언했다고 해서 배열이 만들어진 것은 아니라는 점이다.
이 단계에서는 단지 “배열을 가리킬 수 있는 변수”만 만들어진 상태이다.
즉, students 변수에는 10, 20 같은 값이 아니라 배열 자체를 가리키는 값이 들어가게 된다.
배열 생성
배열을 실제로 사용하려면 배열을 생성해야 한다.
students = new int[5];
이 코드는 다음과 같은 의미를 가진다.
- `new` : 새로 생성한다
- `int[5]` : int 타입 변수 5개
즉, 정수 5개를 연속으로 저장할 수 있는 공간을 메모리에 만든다는 뜻이다.
이전처럼 `int student1`부터 `int student5`까지 직접 선언하던 작업을
배열 하나로 깔끔하게 대체할 수 있다.
배열과 자동 초기화
자바에서 배열을 생성하면 내부 값은 자동으로 초기화된다.
new int[5];
이 경우 배열 내부는 다음과 같이 초기화된다.
- 숫자 타입 (int, long 등) → 0
- boolean → false
- 참조 타입 (String 등) → null
따라서 배열을 생성하자마자 바로 사용할 수 있다.
배열의 참조값과 메모리 구조
배열은 값 타입이 아니라 참조 타입이다.
즉, 배열 변수에는 실제 데이터가 아니라 배열이 저장된 메모리 주소(참조값)가 저장된다.
new int[5];
이 코드가 실행되면 다음과 같은 일이 발생한다.
- int 5개를 저장할 수 있는 메모리 공간 확보
- `int`는 `4byte`이므로 `4byte × 5 = 20byte`
- 자바는 이 배열이 위치한 메모리 주소(참조값)를 생성
- 그 참조값을 반환
이를 개념적으로 표현하면 다음과 같다.
int[] students = new int[5]; // 배열 생성
// 내부적으로는
int[] students = x001; // x001은 배열의 참조값
여기서 `x001`은 이해를 돕기 위한 가상의 값이며, 실제로 이렇게 보이지는 않는다.
중요한 점은 배열 자체에는 이름이 없고,
`students` 변수가 이 배열을 가리키는 참조값을 가지고 있다는 점이다.
배열 변수 출력해보기
배열 변수를 출력해보면 참조값을 확인할 수 있다.
System.out.println(students);
출력 예시는 다음과 같다.
이 출력의 의미는 다음과 같다.
- [I : int 타입 배열
- @4617c264 : 배열의 참조값(16진수 주소 표현)
즉, 배열 변수를 출력하면 배열의 내용이 아니라 배열이 위치한 메모리 주소가 출력된다.
정리
- 배열 변수 선언은 배열을 가리킬 수 있는 변수만 만드는 것이다
- `new`를 통해 실제 배열을 메모리에 생성해야 사용 가능하다
- 배열은 참조 타입이며, 변수에는 배열의 참조값이 저장된다
- 배열 생성 시 내부 값은 자동으로 초기화된다
'김영한 > 자바 입문' 카테고리의 다른 글
| 메서드 호출과 값 전달 (0) | 2026.02.10 |
|---|---|
| 향상된 for문(for-each) (0) | 2026.02.10 |
| Scanner (0) | 2026.02.09 |
| 형변환과 오버플로우 (0) | 2026.02.09 |
| 스코프 (0) | 2026.02.09 |