변수는 한 개의 데이터만 저장할 수 있다.
따라서 저장해야 할 데이터의 수가 많아지면 그만큼 많은 변수가 필요하다. 같은 타입의 많은 양의 데이터를 다루는 프로그램에서는 좀 더 효율적인 방법이 필요한데 이것이 배열이다. 배열은 같은 타입의 데이터를 연속된 공간에 나열시키고, 각 데이터에 인덱스(index)를 부여해 놓은 자료구조이다.
배열을 사용하기 위해서는 우선 배열 변수를 선언해야 한다.
타입[] 변수;
타입 변수[];
대괄호[]
는 배열 변수를 선언하는 기호로 사용되는데, 타입 뒤에 붙을 수도 있고 변수 뒤에 붙을 수도 있다. 타입은 배열에 저장될 데이터의 타입을 말한다.
int[] intArray;
double[] doubleArray;
String[] strArray;
배열 변수는 참조 변수에 속한다. 배열도 객체이므로 힙 영역에 생성되고 배열 변수는 힙 영역의 배열 객체를 참조하게 된다. 참조할 배열 객체가 없다면 배열 변수는 null 값으로 초기화될 수 있다.
타입[] 변수=null;
만약 배열 변수가 null 값을 가진 상태에서 변수[인덱스]
로 값을 읽거나 저장하게 되면 NullPointerException이 발생한다. 배열 변수는 배열을 생성하고 참조하는 상태에서 값을 저장하거나 읽어야 한다.
배열 항목에 저장될 값의 목록이 있다면, 다음과 같이 간단하게 배열 객체를 만들 수 있다.
데이터타입[] 변수={값0, 값1, 값2, 값3, ...};
중괄호{}
는 주어진 값들을 항목으로 가지는 배열 객체를 힙에 생성하고, 배열 객체의 번지를 리턴한다. 배열 변수는 리턴된 번지를 저장함으로써 참조가 이루어진다.
int[] scores={83,90,87};
System.out.println("scores[0]:"+scores[0]); //83
System.out.println("scores[1]:"+scores[1]); //90
System.out.println("scores[2]:"+scores[2]); //87
int sum=0;
for(int i=0; i<3; i++){
sum+=scores[i];
}
System.out.println("총합: "+sum); //260
double avg=(double)sum/3;
System.out.println("평균: "+avg); //86.6666....
배열 변수를 이미 선언한 후에 다른 실행문에서 중괄호를 사용한 배열 생성은 허용되지 않는다.
타입[] 변수;
변수={값0, 값1, 값2, 값3, ...}; //컴파일 에러
배열 변수를 미리 선언한 후, 값 목록들이 나중에 결정되는 상황이라면 new 연산자
를 사용해서 값 목록을 지정해주면 된다. new 연산자 바로 뒤에는 배열 변수 선언에서 사용한 "타입[]"를 붙여주고 중괄호 {}에는 값들을 나열해주면 된다.
변수=new 타입[] {값0, 값1, 값2, 값3, ...};
String[] names=null;
names=new String[]{"김개똥", "홍길동", "박말똥"};
값의 목록을 가지고 있지 않지만, 향후 값들을 저장할 배열을 미리 만들고 싶다면 new 연산자로 다음과 같이 배열 객체를 생성시킬 수 있다.
타입[] 변수=new 타입[길이];
길이는 배열이 저장할 수 있는 값의 수를 말한다. new 연산자로 배열을 생성할 경우에는 이미 배열 변수가 선언된 후에도 가능하다.
타입[] 변수=null;
변수=new 타입[길이];
배열이 생성되고 나서 새로운 값을 저장하려면 대입 연산자를 사용하면 된다
변수[인덱스]=값;
int[] scores=new int[3];
scores[0]=83;
scores[1]=90;
scores[2]=75;
배열의 길이란 배열에 저장할 수 있는 전체 항목 수를 말한다. 코드에서 배열의 길이를 얻으려면 배열 객체의 length 필드를 읽으면 된다. 필드는 객체 내부의 데이터를 말한다.
배열의 length 필드를 읽기 위해서는 배열 변수에 도트(.) 연산자를 붙이고 length를 적어주면 된다.
배열변수.length;
int[] intArray={10,20,30};
int num=intArray.length; //3
length 필드는 읽기 전용 필드이기 때문에 값을 바꿀 수 없다.
intArray.length=10; //잘못된 코드