[Java] 필드, 메서드 다형성

전우석·2024년 4월 1일

Java

목록 보기
24/24

필드, 메서드(매개변수) 다형성

필드/메서드 다형성은 프로그램의 유연성을 높여주며, 새로운 타입을 추가하거나 기존 타입을 변경할 때, 코드 수정을 최소화할 수 있도록 한다.

필드 다형성

필드 다형성은 클래스의 필드(변수)가 다양한 타입의 객체를 참조할 수 있는 성질이다.

  • 하나의 필드가 상황에 따라 다른 타입의 객체를 참조할 수 있게 되며, 이는 동적으로 객체의 행동을 변경하는 데 사용된다.

예시 설명

Car car = new Car();
car.tire = new Tire(); // Car 객체의 tire 필드에 Tire 객체를 할당
car.run(); // Tire 객체의 run 메서드를 실행

car.tire = new HankookTire(); // tire 필드를, Tire 클래스를 상속받은 HankookTire 객체로 재할당
car.run(); // HankookTire 객체의 run 메서드를 실행

car.tire = new KumhoTire(); // tire 필드를, Tire 클래스를 상속받은 KumhoTire 객체로 재할당
car.run(); // KumhoTire 객체의 run 메서드를 실행
  • 이 예시에서, Car 클래스의 tire 필드는 Tire, HankookTire, KumhoTire 등 다양한 타입의 타이어 객체를 참조할 수 있다.
    • HankookTire, KumhoTire 객체가 Tire 객체를 상속받았기 때문
  • 이처럼 필드 다형성을 활용하면, 프로그램 실행 중에 객체의 구체적인 타입을 변경할 수 있으며, 다양한 행동을 수행할 수 있게 된다.

매개변수 다형성

매개변수 다형성은 메서드가 다양한 타입의 객체를 매개변수로 받을 수 있게 해주는 성질을 말한다.

  • 이는 메서드 오버로딩(overloading)이나 메서드 오버라이딩(overriding)과 같은 다형성의 다른 형태와 함께 자주 사용된다.

예시 설명

public class Driver {
	public void drive(Vehicle vehicle) {  // 매개변수로 Vehicle 객체를 입력받는다.
		vehicle.run();
	}
}

Driver driver = new Driver();
driver.drive(new Vehicle()); // Vehicle 객체를 매개변수로 drive 메서드 호출
driver.drive(new Taxi()); // Vehicle 객체를 상속받은, Taxi 객체를 매개변수로 drive 메서드 호출
driver.drive(new Bus()); // Vehicle 객체를 상속받은, Bus 객체를 매개변수로 drive 메서드 호출
  • 이 예시에서, drive 메서드는 Vehicle 타입의 매개변수를 받게 되어 있다.
  • 또한 Vehicle 클래스를 상속받는 TaxiBus와 같은 하위 클래스의 인스턴스도 Vehicle 타입으로 간주되므로, 이들도 drive 메서드의 매개변수로 전달될 수 있다.
  • 이를 통해, 하나의 메서드가 다양한 타입의 객체를 처리할 수 있게 되며, 코드의 재사용성이 높아진다.

0개의 댓글