Language/JAVA

[JAVA] 배열(Array)

IT수정 2024. 9. 3. 22:51

변수는 하나의 값만 저장할 수 있다. 따라서 저장해야 할 값의 수가 많아지면 그만큼 많은 변수가 필요하다. 변수가 많아질수록 매우 비효율적이고 지루한 코딩이 되기 때문에, 이를 효율적으로 다루는 방법이 바로 배열이다. 배열은 연속된 공간에 값을 나열시키고, 각 값에 인덱스 구조를 부여해 놓은 자료구조이다. 인덱스는 대괄호 []와 함께 사용하여 각 항목의 값을 읽거나 저장하는 데 사용한다.

 

배열은 다음과 같은 특징을 가지고 있다.

  • 배열은 같은 타입의 값만 관리한다.
  • 배열의 길이는 늘리거나 줄일 수 없다.

배열을 생성과 동시에 길이가 결정된다. 또한 한 번 결정된 배열의 길이는 늘리거나 줄일 수 없다.

 

배열 변수 선언

배열을 사용하기 위해서는 우선 배열 변수 선언을 해야한다. 배열 변수 선언은 두 가지 형식으로 작성할 수 있다.

타입[] 변수;
타입 변수[];

 

배열 변수는 참조 변수이다. 배열도 객체이므로 힙 영역에 생성되고 배열 변수는 힙 영역의 배열 주소를 저장한다. 참조할 배열이 없다면 배열 변수도 null로 초기화할 수 있다.

 

값 목록으로 배열 생성

배열에 저장될 값의 목록이 있다면, 다음과 같이 간단하게 배열을 생성할 수 있다.

String[] season = { "Spring", "Summer", "Fall", "Winter" };

 

이렇게 생성된 배열에서 "Summer"를 "여름"으로 바꾸고 싶다면 대입 연산자를 사용하면 된다.

season[1] = "여름";

 

중괄호 {}로 감싼 값의 목록을 배열 변수에 대입할 때 주의할 점이 있다. 배열 변수를 미리 선언한 후에는 값 목록을 변수에 대입할 수 없다.

타입[] 변수;
변수 = { 값0, 값1, 값2, 값3, ... }; // 컴파일 에러

 

배열 변수를 선언한 시점과 값 목록이 대입되는 시점이 다르다면 다음과 같이 new 타입[]을 중괄호 앞에 붙여 주면 된다.

변수 = new 타입[] { 값0, 값1, 값2, 값3, ... };

 

new 연산자로 배열 생성

값의 목록은 없지만 향후 값들을 저장할 목적으로 배열을 미리 생성할 수도 있다. new 연산자를 다음과 같이 사용하면 배열 객체를 생성시킨다. 길이는 배열이 저장할 수 있는 항목 수를 말한다.

타입[] 변수 = new 타입[길이];

 

new 연산자는 해당 길이의 배열을 생성하고 배열의 번지를 리턴하기 때문에 배열 변수에 대입할 수 있다. 이미 배열 변수가 선언된 후에도 다음과 같이 대입이 가능하다.

타입[] 변수 = null;
변수 = new 타입[길이];

 

new 연산자로 배열을 처음 생성하면 배열 항목은 기본값으로 초기화된다. 다음 표는 타입별 배열의 초기값을 보여 준다.

데이터 타입 초기값
기본 타입 byte[]
char[]
short[]
int[]
long[]
0
'\u0000'
0
0
0L
float[]
double[]
0.0F
0.0
boolean[] false
참조 타입 클래스[]
인터페이스[]
null
null

 

배열을 생성하고 난 후 특정 인덱스 항목을 새로운 값으로 변경하는 방법은 동일하다.

변수[인덱스] = 값;

 

배열 길이

배열의 길이란 배열에 저장할 수 있는 항목 수를 말한다. 코드에서 배열의 길이를 얻으려면 도트(.) 연산자를 사용해서 참조하는 배열의 length 필드를 읽으면 된다.

배열변수.length;

 

배열의 length 필드는 읽기만 가능하므로 다음과 같이 값을 변경할 수는 없다.

intArray.length = 10; // 컴파일 에러

 

배열 길이 예제 : 전체 배열의 총합 구하기

public class ArrayLength {
	public static void main(String[] args) {
    	int[] scores = { 70, 80, 90 };
        
        int sum = 0;
        for(int i = 0; i < scores.length; i++) {
        	sum += scores[i];
            }
            System.out.println(sum);
            
            //배열 항목의 평균 구하기
            double avg = (double) sum / scores.length;
            System.out.println(avg);
         }
      }

 

실행 결과

240
80.0

 

배열 복사

배열은 한 번 생성하면 길이를 변경할 수 없다. 더 많은 저장 공간이 필요하다면 더 큰 길이의 배열을 새로 만들고 이전 배열로부터 항목들을 복사해야 한다. 가장 기본적인 복사 방법은 for 문을 이용하는 것이다.

public class Example {
	public static void main(String[] args) {
    	int[] oldIntArray = {1, 2, 3};
        
        int[] newIntArray = new Int[5];
        
        for(int i = 0; i < oldIntArray.length; i++) {
			newIntArray[i] = oldIntArray[i];
            }
            
        for(int i = 0; i < newIntArray.length; i++) {
        	System.out.print(newIntArray + ", ");
            }
        }
    }

 

실행 결과

1, 2, 3, 0, 0

 

배열 복사를 위한 더 간단한 방법이 있다. System의 arraycopy() 메서드를 이용하면 된다.

System.arraycopy(원본 배열, 원본 배열 시작 인덱스, 새 배열, 새 배열 붙여넣기 시작 인덱스, 복사 항목 수);

 

배열 항목 반복을 위한 향상된 for 문

자바는 배열 및 컬렉션을 좀 더 쉽게 처리할 목적으로 다음과 같은 for 문을 제공한다. 카운터 변수와 증감식을 사용하지 않고, 항목의 개수만큼 반복 후 자동으로 for 문을 빠져나간다.

for ( 타입 변수 : 배열 ) {
	실행문;
    }

 

for 문이 실행되면 배열에서 가져올 항목이 있을 경우 변수에 항목을 저장하고 실행문을 실행한다. 반복하다가 가져올 다음 항목이 없으면 for문을 종료한다.

public class Example {
	public static void main(String[] args) {
    	int[] scores = { 95, 71, 84, 93, 87 };
        
        int sum = 0;
        for(int score : scores) {
        	sum += score;
            }
            System.out.println(sum);
         }
      }

 

실행 결과

430

 

 

'Language > JAVA' 카테고리의 다른 글

[JAVA] 객체지향 프로그래밍  (3) 2024.09.04
[JAVA] 다차원 배열  (0) 2024.09.03
[JAVA] 문자열(String)  (2) 2024.09.03
[JAVA] 참조 타입  (0) 2024.09.03
[JAVA] break 문과 continue 문  (0) 2024.09.03