간단한 다형성 예 코드로 옮기기

“다른 종류의 개체”
- 타입(클래스)가 다르다는 의미

“같은 지시”
- 동일한 함수 시그니처 호출

“동작을 달리”
- 개체의 종류에 따라 실제로 실행되는 함수 구현 코드가 다름

절차적 언어에서 if문을 사용해 불편함

late binding:
- 실제로 어떤 함수가 실행되는지는 실행 중 결정
- 함수 시그니처는 컴파일 중 결정
- 이와 반대로 컴파일 중에 어떤 함수를 호출할지 결정되면 이른 바인딩
다형성을 구현하려면 상속이 필요
- 컴파일을 할 때 함수 시그니처가 존재한다는 것은 컴파일러가 알아야 함
- 그렇게 해야 함수를 호출하는 곳의 코드를 컴파일 할 수 있으니
- 상속관계를 이용해 부모 클래스의 시그니처의 존재를 컴파일러가 알 수 있음
- 시그니처는 유지하되 자식 클래스에서 함수의 바디 내용은 다르게 구현
- 오버라이딩
C 언어의 함수 포인터와 유사한 개념
- 함수의 시그니처를 변수의 자료형처럼 사용
- 즉 함수의 매개변수 목록과 반환형만 동일하면 구체적인 구현은 몰라도 함수 포인터에 대입, 전달할 수 있음

실용적인 용도
- 다른 종류의 개체를 편하게 저장 및 처리 가능
- 상속 때문에 가능함

서브 타입 다형성
- OOP에서는 서브타입 다형성
