- 객체 배열
객체 역시 배열로 다루는 것이 가능하며, 이를 '객체 배열'이라고 한다.
// 객체 배열 안에는 객체가 아닌, 객체의 주소가 저장이 된다.
// 즉, 객체 배열은 참조변수들을 하나로 묶은 '참조변수 배열'이다.
Tv tv1, tv2, tv3; // 아래처럼 배열로 만들 수 있다.
Tv[] tvArr = new Tv[3]; // 길이가 3인 Tv타입의 참조변수 배열
객체 배열을 생성하는 것은 객체를 다루기 위한 참조변수들을 만든 것일 뿐, 객체가 저장되어있지는 않다. 따라서 객체 배열 생성 후, 추가적으로 객체를 저장해야 한다.
Tv[] tvArr = new Tv[3]; // 참조변수 배열(객체 배열) 생성
// 객체를 생성해서 각 요소에 저장 (생성 시에는 모두 null 상태)
tvArr[0] = new Tv();
tvArr[1] = new Tv();
tvArr[2] = new Tv();
// 초기화 블럭으로도 객체 생성 가능
Tv[] tvArr = { new Tv(), new Tv(), new Tv() };
// 객체의 수가 많을 때는 for문 사용도 추천
Tv[] tvArr = new Tv[100];
for(int i = 0 ; i < tvArr.length ; i++) {
tvArr[i] = new Tv();
}
여러 종류의 객체를 하나의 배열에 저장하는 방법
→ '다형성(polymorphism)'을 배우고 나면 가능하다!
- TvTest4.java
public class TvTest4 {
public static void main(String[] args) {
Tv[] tvArr = new Tv[3]; // Tv타입의 배열 >> Tv인스턴스가 들어갈 수 있는 3개의 공간
for (int i = 0 ; i < tvArr.length ; i++) {
tvArr[i] = new Tv(); // 각 Tv배열 내의 공간에 인스턴스 생성 후 대입
tvArr[i].channel = i + 10;
}
for (int i = 0; i < tvArr.length; i++) {
tvArr[i].channelUp(); // 메서드 호출. 자기 인스턴스의 channel 1 증가
System.out.printf("tvArr[%d].channel : %d%n", i, tvArr[i].channel);
}
for (Tv t : tvArr) { // 향상 for문도 사용 가능
System.out.printf("tvArr.channel : %d%n", t.channel);
}
}
}
참고문헌 : 남궁성(2016), Java의 정석, 도우출판