본문 바로가기
JAVA

[JAVA] 자바 배열 (Array)

by Amy IT 2022. 5. 19.

지금까지는 데이터를 관리하기 위해 변수만 사용했습니다. 그런데 데이터가 많아질 경우에는 데이터 개수만큼 변수가 필요해지기 때문에 관리가 어려워집니다. 이때 필요한 것이 배열입니다. 배열을 사용하면 하나의 변수(배열명)로 많은 데이터 관리가 가능해집니다. 배열의 기본적인 특징은 다음과 같습니다.

 

  • 기본 데이터 형과 참조 데이터 형 모두 배열로 저장 가능하지만, 하나의 배열에는 같은 데이터 형만 가능합니다. 
  • 배열의 각 방에 접근할 때는 인덱스(첨자)를 사용하며, 인덱스는 0부터 시작합니다.
  • 배열의 크기는 length를 사용하여 구합니다.
  • 배열이 생성되면 각 데이터 형에 맞는 기본값으로 초기화됩니다. 
  • 배열은 참조형 데이터이기 때문에 배열명에 저장된 데이터는 실제 데이터가 아닌, 실제 데이터가 저장된 주소입니다.

 

 

◆ 배열을 생성하는 세 가지 방법 

 

(1) new 키워드 이용

 

① 배열 선언 : 대괄호를 사용하여 배열을 선언합니다. 

데이터형 [] 배열명;
데이터형 배열명 [];

 

② 배열 생성 : new 키워드를 사용해 지정된 크기만큼 배열을 생성합니다. 생성된 배열의 각 방에는 초기값으로 기본값이 저장됩니다. 

배열명 = new 데이터형[크기];

 

③ 배열 초기화 : 실제 원하는 값을 저장합니다. 

배열명[인덱스] = 값;

 

int 타입 배열인 num이란 변수를 생성하여 값을 저장해 보겠습니다.

int [] num;
num = new int[3];
num[0] = 10;
num[1] = 20;
num[2] = 30;

 

배열 선언과 배열 생성을 한 줄로 작성하는 것도 가능합니다.

int [] num = new int[3];

 

배열의 각 방에 저장된 값이 출력되는 것을 확인할 수 있습니다.

System.out.println(num[0]); //10
System.out.println(num[1]); //20
System.out.println(num[2]); //30

 

 

(2) 리터럴 이용

 

리터럴을 이용하면 배열 선언과 생성 및 초기화를 한 번에 처리할 수 있습니다. 지정된 값의 개수만큼 자동으로 배열 크기가 설정됩니다. 주의할 점은 다른 방법과 달리 선언과 생성 및 초기화를 따로 작성하면 안 되고 한 문장으로만 작성해야 한다는 것입니다. 

데이터형 [] 배열명 = {값1, 값2, 값3};

 

다음과 같이 사용 가능합니다.

int [] num2 = {10,20,30};

 

 

(3) new 키워드와 리터럴 혼용

 

new 키워드와 리터럴을 혼용하여 배열을 생성할 수 있습니다. 이때 [ ] 안에 배열의 크기를 지정하면 안 되고, 배열의 크기는 값의 개수에 의해 정해집니다. 

int [] num3;
num3 = new int[] {10,20,30};

 

배열 선언과 생성 및 초기화를 한 줄로 작성 가능합니다. 즉, 정리하자면 리터럴만 사용시 한 줄로만 작성해야 하고, 그외 new 키워드를 사용할 때는 한 줄 혹은 두 줄 모두 가능하다고 할 수 있습니다. 

int [] num3 = new int[] {10,20,30};

 

이렇게 생성된 배열을 그림으로 표현하면 다음과 같습니다.

 

배열 선언 후 배열을 생성하면 지정한 개수만큼 각 방이 만들어지고 각 방에 접근할 수 있도록 인덱스 번호가 0번부터 부여됩니다. 이후 각 방에 값을 저장한 상태입니다. 이렇게 만들어진 배열이 있는 곳의 주소를 num이라는 변수에 참조시킵니다. 즉, num에는 배열의 주소가 저장됩니다. 

 

 

 

 

 배열의 크기 구하기 

 

length 속성을 이용하여 배열의 크기를 알 수 있습니다.

System.out.println(num.length); //3

 

 

 

 for 문을 사용하여 배열에 저장된 모든 데이터 출력하기

 

위의 배열은 0번, 1번, 2번까지 총 3개의 방으로 구성되어 있습니다. 각 방에 저장된 데이터를 모두 가져오기 위해서 다음과 같이 for문을 사용할 수 있습니다.

for (int i = 0; i < num.length; i++) {
	System.out.println("for 문 : "+num[i]);
}
System.out.println("===================");

i가 num.length - 1 까지 증가하며 반복문을 수행하게 됩니다. 인덱스 번호가 0번부터 시작하기 때문에 배열의 크기에서 1을 뺀 값으로 모든 방의 인덱스 번호를 거칠 수 있게 됩니다. 0번 방의 값 10, 1번 방의 값 20, 2번 방의 값 30이 모두 출력된 것을 확인할 수 있습니다. 

 

배열에 저장된 모든 값의 합계를 구할 수도 있습니다.

int total = 0;
for (int i = 0; i < num.length; i++) {
	total += num[i];
	System.out.println(num[i]);
}
System.out.println("for 총합 : "+total);
System.out.println("===============");

 

 

 

for-each 문 (향상된 for 문)을 사용하여 배열에 저장된 모든 데이터 출력하기

 

for-each 반복문으로 같은 작업을 처리할 수 있습니다. for-each문의 기본 문법은 다음과 같습니다. 조건식을 사용하지 않고 배열명만을 사용합니다. 

for( 데이터형 변수 : 배열명 ) {
      문장;
}
for (int data : num) { 
	System.out.println("for each : "+ data);
}

num 변수가 가지는 방의 개수만큼 자동으로 반복 처리되며 각 방의 데이터를 꺼내오게 됩니다. 

 

마찬가지로 합계를 구할 수 있습니다.

int total = 0;
for (int x : num) { 
	total += x;
	System.out.println(x);
}
System.out.println("for each 총합 : "+total);

 

 

이번 글에서는 배열의 기본적인 내용을 정리해 보았습니다. 다음 글에서 이어서 2차원 배열을 알아보도록 하겠습니다.

 

 

댓글