Java/자바 정리

64. 필드의 다형성 – 하나의 타입으로 다양한 객체 다루기

코딩하는냥이 2025. 5. 7. 15:34
반응형

이번 글에서는 부모 클래스 타입의 필드를 선언한 뒤,
여러 자식 클래스를 대입해 다형성을 구현하는 방법을 실습합니다.
이는 유지보수성과 확장성을 높이는 데 매우 중요한 기법입니다.


📦 부모 클래스 (Tire.java)

package ch07.sec08.exam01;

public class Tire {
	public void roll() {
		System.out.println("회전합니다.");
	}
}

📦 자식 클래스 - 한국타이어 (HankookTire.java)

package ch07.sec08.exam01;

public class HankookTire extends Tire {
	public void roll() {
		System.out.println("한국 타이어가 회전합니다.");
	}
}

📦 자식 클래스 - 금호타이어 (KumhoTire.java)

package ch07.sec08.exam01;

public class KumhoTire extends Tire {
	public void roll() {
		System.out.println("금호 타이어가 회전합니다.");
	}
}

📦 자동차 클래스 (Car.java)

package ch07.sec08.exam01;

public class Car {
	public Tire tire; // 부모 타입 필드

	public void run() {
		tire.roll(); // 다형적 메서드 호출
	}
}

📌 실행 클래스 (CarExample.java)

package ch07.sec08.exam01;

public class CarExample {
	public static void main(String[] args) {
		Car car = new Car();

		car.tire = new Tire();
		car.run(); // 기본 타이어

		car.tire = new HankookTire();
		car.run(); // 한국 타이어

		car.tire = new KumhoTire();
		car.run(); // 금호 타이어
	}
}

💻 실행 결과

회전합니다.
한국 타이어가 회전합니다.
금호 타이어가 회전합니다.

💬 코드 설명

  • Tire는 모든 타이어의 공통 타입 (부모 클래스)
  • HankookTire, KumhoTire는 Tire를 상속한 자식 클래스
  • Car 클래스는 Tire 타입의 필드를 가짐 → 어떤 타이어든 대입 가능
  • run() 메서드는 tire.roll()을 호출하지만,
    실제로는 대입된 객체에 따라 다른 결과가 출력됨

📌 간단 정리

대입된 객체 실행 결과
new Tire() 회전합니다.
new HankookTire() 한국 타이어가 회전합니다.
new KumhoTire() 금호 타이어가 회전합니다.

💡 포인트 정리

  • 부모 타입 필드에 자식 객체를 넣으면 자동 타입 변환(Promotion)
  • 자식 클래스가 메서드를 오버라이딩하면 다형성으로 실제 메서드 실행
  • 하나의 메서드 호출로 다양한 결과를 출력 → 유지보수성과 확장성 증가
  • 인터페이스를 쓰면 더 유연한 구조로 확장 가능