배열의 선언과 생성

2026. 2. 9. 23:02·김영한/자바 입문

 

프로그램을 작성하다 보면 같은 타입의 변수를 여러 개 다뤄야 하는 상황이 자주 발생한다.
예를 들어 학생 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];

이 코드가 실행되면 다음과 같은 일이 발생한다.

  1. int 5개를 저장할 수 있는 메모리 공간 확보
    • `int`는 `4byte`이므로 `4byte × 5 = 20byte`
  2. 자바는 이 배열이 위치한 메모리 주소(참조값)를 생성
  3. 그 참조값을 반환

이를 개념적으로 표현하면 다음과 같다.

int[] students = new int[5]; // 배열 생성
// 내부적으로는
int[] students = x001;       // x001은 배열의 참조값

여기서 `x001`은 이해를 돕기 위한 가상의 값이며, 실제로 이렇게 보이지는 않는다.

중요한 점은 배열 자체에는 이름이 없고,
`students` 변수가 이 배열을 가리키는 참조값을 가지고 있다는 점이다.

 

 

배열 변수 출력해보기

배열 변수를 출력해보면 참조값을 확인할 수 있다.

System.out.println(students);

출력 예시는 다음과 같다.

`[I@4617c264`

이 출력의 의미는 다음과 같다.

  • [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
'김영한/자바 입문' 카테고리의 다른 글
  • 메서드 호출과 값 전달
  • 향상된 for문(for-each)
  • Scanner
  • 형변환과 오버플로우
sqaxe1
sqaxe1
woojoo-devlog 님의 블로그 입니다.
  • sqaxe1
    Woojoo's Devlog
    sqaxe1
  • 전체
    오늘
    어제
    • 분류 전체보기 (148)
      • Backend (9)
        • Servlet (7)
        • Spring (2)
      • Frontend (1)
      • CS (0)
      • Book (33)
        • 자바 웹 프로그래밍 Next Step (30)
        • 테스트 주도 개발: 고품질 쾌속개발을 위한 TDD.. (1)
        • 성공과 실패를 결정하는 1%의 네트워크 원리 (2)
      • Engineering (0)
        • Testing (0)
      • Infra (6)
        • AWS (6)
      • Java (4)
      • Network (1)
      • 김영한 (28)
        • 자바 입문 (8)
        • 실전 자바 - 기본편 (6)
        • 실전 자바 - 중급편 (10)
        • 실전 자바 - 고급편 (4)
      • Web (39)
        • Web Basics (39)
      • Project (24)
        • NeoSquare (0)
        • Memo Evolution (24)
      • 정보처리기사 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    java
    aws
    개발서적
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
sqaxe1
배열의 선언과 생성
상단으로

티스토리툴바