객체를 저장하는 배열도 만들 수 있다. 자바에서는 자주 사용됨.
정수형 배열과는 다르다. 정수형 배열에는 정수값이 저장되어 있지만, 객체 배열에는 객체에 대한 참조값(주소)이 저장되어있다.
//Rect 클래스
class Rect {
int width, height;
public Rect(int w, int h){
this.width=w;
this.height=h;
}
double getArea() { return (double)width*height; }
}
여기서는 아직 배열이 없음. 배열의 요소를 만드는 코드임.
//Rect 객체 배열을 생성하고 사용하는 코드
public class RectArrayTest {
main {
1. Rect[] list;
2. list = new Rect[5];
3. for(int i=0, i<list.length; i++)
list [i] = new Rect(i, i);
4. for(int i=0; i<list.length; i++)
System.out.println(i+"번째 사각형의 면적="+list[i].getArea());
}
}
자바에서는 배열이 객체이다. 따라서 배열을 참조할 수 있는 참조 변수가 필요하다.
List라는 변수에 Rect[]라는 배열 객체의 참조값을 저장함.
list에 길이가 5개인 배열 객체를 생성함. 배열 요소는 아직 생성되지 않았음.
list에 list(0), list(1) 이런 식으로 각각의 칸은 만들어졌지만 그 칸에 들어갈 요소들은 생성되지 않았다는 뜻.
반복문을 이용하여, 배열의 크기(5)만큼 객체(Rect class)를 생성하여 저장함.
반복문을 사용하여 배열에 저장된 객체를 처리함
자바의 표준 배열은 크기가 결정되면 변경하기 힘들다. 따라서 실제 프로그래밍에서는 동적 배열을 많이 사용한다. 동적 배열 중 ArrayList를 사용한 코드.
import java.util.ArrayList;
public class ArrayListTest {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>(); //1
list.add("홍콩"); //2
list.add("하와이");
list.add("괌");
list.add("사이판");
System.out.println("여행지 추천 시스템입니다.");
int index = (int) (Math.random()*list.size());
System.out.println("추천 여행지는"+list.get(index)); //3
}
}
ArrayList를 생성할 때는 어떤 객체를 저장할 것인지 <>안에 지정하여야한다. 여기서는 String 객체를 저장한다고 지정한 것.
ArraList에 객체를 추가할 때는 add()를 사용한다.
지정된 인덱스에서 객체를 꺼낼 때는 get()을 호출한다.
-크기를 기존에 지정하느냐 아니냐가 동적 객체 배열과의 차이인 듯