Polymorphism은 “many forms”를 의미한다.
넓은 의미에서 다형성은 하나의 entity를 여러 형태로 사용할 수 있는 것을 의미한다.
- 하나의 함수를 여러 형태로 사용하는 오버로딩과 오버라이딩
- 하나의 클래스를 여러 형태로 사용하는 generic
- 하나의 변수를 여러 형태로 사용하는 subtyping
모두가 다형성이 된다.
하지만, 일반적으로 다형성은 하나의 상위 타입 변수에 여러 하위 타입 객체를 갈아 끼울 수 있는 것을 의미한다.
다형성을 이용하면 여러 타입의 객체를 동일한 방식으로 사용할 수 있게 된다. 즉, 동일한 인터페이스를 갖고 사용할 수 있게 된다.
말하자면 여러 타입을 표준화하게 되는 것이다.
interface Car {
void ride();
}
class Sonata implements Car {
public void ride() {
System.out.println("소나타 탑승");
}
}
class Avante implements Car {
public void ride() {
System.out.println("아반떼 탑승");
}
}
class Client {
Car myCar;
public void manageCars() {
myCar = new Sonata();
myCar.ride();
myCar = new Avante();
myCar.ride();
}
}
Car 타입 변수 하나로 Sonata 인스턴스와 Avante 인스턴스를 모두 사용할 수 있다.