본문 바로가기

Programming/JAVA

인터페이스(8) - 인터페이스의 타입 변환과 다형성 3(배열 객체)

java logo image

 

 

 

이번에는 인스턴스 객체의 배열형 타입 관리의 케이스와 마찬가지로, 인터페이스 역시 구현 객체를 배열 타입으로 관리해 보는 예제를 확인해 보도록 하겠습니다. 우선, 기존 예제에서 작성되었던 Car 클래스를 살펴보겠습니다. 

 

 

public class Car {
	Tire frontLeftTire = new HankookTire();
	Tire frontRightTire = new HankookTire();
	Tire backLeftTire = new HankookTire();
	Tire backRightTire = new HankookTire();
	
	void run() {
		frontLeftTire.roll();
		frontRightTire.roll();
		backLeftTire.roll();
		backRightTire.roll();
		
		System.out.println("-------");
	}
}

 

public class ExampleMain {	
	public static void main(String[] args) {
		Car myCar = new Car();
		myCar.run();
		
		myCar.frontLeftTire = new KumhoTire();
		myCar.frontRightTire = new KumhoTire();
		
		myCar.run();
	}
}

 

위의 코드에서 인터페이스 Tire를 구현하는 객체의 변수가 총 네 개인데, 이 변수명을 일일이 지정해 타이핑해야 하는 번거로움이 있다는 점을 확인할 수 있습니다. 더불어 이 인터페이스 타입 변수에서 roll( )이라는 메서드를 호출할 때도, 네 개의 변수에서 일일이 동일한 메서드를 호출해야 하는 상황입니다. 

 

이러한 불편하고 반복적인 코드 작성을 최소화하기 위해서 인터페이스 타입의 배열 객체를 사용해 보도록 하겠습니다. 

 

 

 


 

 

public class Car {
	Tire[] tires = {
		new HankookTire(),
		new HankookTire(),
		new HankookTire(),
		new HankookTire()
	};
	
	void run() {
		for(Tire tire : tires) {
			tire.roll();
		}
		System.out.println("******");
	}
}

 

Tire타입의 배열 객체 tires를 선언하고, 여기에 구현 객체 네 개를 선언했습니다. 그리고 for문을 이용해 run( ) 메서드 역시 간단하게 바꾸어 줬습니다. 이제 실행 클래스에서 개별 구현 클래스 인스턴스를 호출할 때는, tires[n] 형태로 호출할 수 있게 되었습니다. 실행 코드를 보겠습니다.

 

public class ExampleMain {	
	public static void main(String[] args) {
		Car myCar = new Car();
		myCar.run();
		
		myCar.tires[0] = new KumhoTire();
		myCar.tires[1] = new KumhoTire();
		
		myCar.run();
	}
}
/* 출력
HankookTire rolls
HankookTire rolls
HankookTire rolls
HankookTire rolls
******
KumhoTire rolls
KumhoTire rolls
HankookTire rolls
HankookTire rolls
******
*/