다형성이란?
다형성이란 모습은 같은데 형태는 다르다는 뜻으로 C++ 기본 철학이고 매우 중요한 개념이지만
어떠한 정형화된 개념은 아니다. C++에는 여러 곳에서 다형성이 사용되며 여기서 2개정도 설명하겠다.
다형성의 사용 목적
: 프로그래머는 프로그램을 만드는것 보다 프로그램을 만든 후 그 프로그램에 대하여 유지, 보수에 더 신경을 써야 하며
더 많은 시간을 투자하게 된다.
다형성은 프로그래머가 프로그램을 만드는데에 있어 클래스와 클래스의 관계를 유연하게 해주어
스펙의 변경, 추가 등에 대하여 유연하게 대처 할 수 있도록 해준다.
다형성을 사용하지 않아도 프로그램은 만들어진다. 단지 나중에 스펙의 변경, 추가 따위에
유연하게 대처 할 수 없을 수 있으며 최악의 경우 프로그램을 처음부터 다시 만들어야 하는 경우가 생기게 된다.
다형성의 특징
: 다형성을 이용하게 되면 하위 클래스에서 상위 클래스의 메서드를 오버라이드하여도
상위 클래스의 메서드들이 호출된다.
멤버 변수도 마찬가지 이다. 하위 클래스에서 멤버 변수에 값을 변경 하여도 상위 클래스에서의 멤버 변수의 값이
호출된다.
예 2가지
1. 오버로딩
C에서는 같은 함수명을 여러번 중복정의할수 없었지만 C++에서는 매개변수명이나 반환형이 다르면 같은 함수명이라도
여러번 중복 정의할 수 있다. 오버로딩도 다형성중에 한 예라고 할 수 고 프로그래머가 어느 함수를 써야될지를 고민하지 않아도 된다.
foo1(int a, int b) foo(int a, int b)
foo2(int c, long d) foo(int c, long d)
2. 동적바인딩
class A
{
virtual void fct(){}
}
class B : public A
{
void fct(){}
}
int main()
{
A * a = new B();
a->fct();
}
a라는 이름의 포인터가 가리키는 대상에 따라서 기능의 형태(호출되는 함수, 혹은 출력결과)는 다르게 나타난다. 이것이 다형성이다. 그리고 class A 와 class B 역시 똑같은 함수를 쓰고 있다. 이것도 다형성의 한 예이다.