LECTURE/JAVA

07. 객체 배열

heywoo 2023. 1. 6. 22:31
객체배열이란?

객체 배열은 레퍼런스 변수에 대한 배열이다.

배열이 같은 자료형들의 변수를 하나의 묶음으로 다루는 것이라면, 객체 배열은 Example 클래스의 인스턴스들을 배열로 다루는 것이다.
객체배열 목적
  • 생성한 인스턴스도 배열을 이용해서 관리하면 동일한 타입의 여러 개 인스턴스를 연속 처리 할 수 있어 편리하다.
  • 또한 반환값은 1개의 값만 반환할 수 있어 동일한 타입의 여러 인스턴스를 반환해야 하는 경우도 객체 배열을 이용할 수 있다.
객체배열의 선언과 할당

 

클래스명 배열명[]   =   new 클래스명[배열크기]

(↑ 선언부)

클래스명[] 배열명    =   new 클래스명[배열크기]

                          (↑ 할당부)

      Example[] arr    =   new Example[2];

 

객체배열의 저장구조

 

arr라는 객체 배열은 arr[0], arr[1]이라는 참조형 변수에 대한 배열이고, 각 변수들은 Example의 인스턴스에 대한 주소를 참조하고 있다.

 

▼예시 : Car 클래스에서 modelName과 maxSpeed 인스턴스를 다루고 있다.

public class Car {
	
	private String modelName;
	private int maxSpeed;
	
	public Car(String modelName, int maxSpeed) {
		this.modelName = modelName;
		this.maxSpeed = maxSpeed;
	}
	
	public void driveMaxSpeed() {
		System.out.println(modelName + "이(가) 최고 시속 " + maxSpeed + "km/h로 달려갑니다.");
	}

}

 

▼ 객체배열을 사용하지 않으면 5대의 인스턴스를 각각 다루고, 1대의 값만 반환한다.

public class Application {

	public static void main(String[] args) {
    
        /* 자동차 5대 인스턴스를 생성 */
		Car car1 = new Car("페라리", 300);
		Car car2 = new Car("람보르기니", 350);
		Car car3 = new Car("롤스로이스", 250);
		Car car4 = new Car("부가티베이론", 400);
		Car car5 = new Car("포터", 450);
		
		car1.driveMaxSpeed();
		car2.driveMaxSpeed();
		car3.driveMaxSpeed();
		car4.driveMaxSpeed();
		car5.driveMaxSpeed();

 

▼ carArray라는 객체배열을 사용하여 5대의 인스턴스를 연속처리 할 수 있다.

Car[] carArray = new Car[5];	carArray 선언과 할당
System.out.println(carArray);   //[Lcom.greedy.section01.init.Car;@762efe5d
System.out.println(carArray[0]); //carArray[0]은 아직 Car 객체를 참조하지 않는 상태로 null 값이다.
carArray[0].driveMaxSpeed();  

//null 값을 가지는 레퍼런스 변수를 대상으로 참조 연산자를 사용하면 java.lang.NullPointerException이 발생한다.

 

▼ carArray 객체배열에 인덱스를 이용하여 Car 객체 참조하여 초기화 :  배열명[i] = new 클래스명();

		carArray[0] = new Car("페라리", 300);
		carArray[1] = new Car("람보르기니", 350);
		carArray[2] = new Car("롤스로이스", 250);
		carArray[3] = new Car("부가티베이론", 400);
		carArray[4] = new Car("포터", 450);

 

▼ carArray 객체배열은 배열이므로 반복문을 사용할 수 있다.

		for(int i = 0; i < carArray.length; i++) {
			carArray[i].driveMaxSpeed();
		}

 

▼ 향상된 for문도 사용할 수 있다.

		for(Car car : carArray) {
			car.driveMaxSpeed();
		}

 

▼ 객체 배열도 할당과 동시에 초기화 할 수 있다 : 클래스명[] 배열명 = {new 클래스명(), new 클래스명()...};

		Car[] carArray2 = {
				new Car("페라리", 300),
				new Car("람보르기니", 350),
				new Car("롤스로이스", 250),
				new Car("부가티베이론", 400),
				new Car("포터", 500)
		};