1. 다형태성 (Polymorphism)
ㅇ [일반] 여러 다른 형태나 모양을 가질 수 있는 능력
ㅇ [화학] 같은 원소이지만, 다른 성질을 갖는 물질 ☞ 동소체 (Allotropy)
- 비록 같은 원소로 구성되지만, 원자 배열이나 결합 방식이 달라, 다른 성질을 갖게됨
ㅇ [전산] 프로그램의 문맥에 따라 여러 다른 형태나 동작을 할 수 있는 능력
2. [객체지향] 다형태성, 다형성
ㅇ 프로그램의 문맥에 따라, 다르게 반응, 행동하는 능력
- 각 객체(Object)가 동일한 메세지나 이벤트에 대해서 다르게 반응, 행동하는 능력
ㅇ 다형성 특징
- 동일 명칭 부여 가능
. 실제 동작은 다르더라도 개념적으로 같은 작업을 하는 메소드들에 똑같은 명칭 부여
.. 동일 이름으로 많은 다른 유형의 데이터를 처리하거나,
.. 하나의 코드로 여러 유형의 데이터를 처리하는 등
. 例) 동일 연산 기호 (+) 이라도, 실수,복소수는 실제 다른 연산 방법을 씀
- 다형성 발생 사례
. 상속, 연산 등이 이루어질 때에 발생됨
- 다형성 지원 시점
. C++ 언어에서는, 컴파일시 및 실행시 모두에서 다형성을 지원
ㅇ 객체지향 프로그래밍에서 다형성 例
- 이질적인 요소들의 리스트를 지원할 수 있음
. 한편, 동질의 요소들에 대한 리스트는, ☞ 배열 참조
- 오버로딩
- 오버라이딩
ㅇ [참고용어] ☞ 상속성, 동적 바인딩, Overriding, Overloading 등 참조
3. [객체지향] 오버로딩, 오버라이딩 비교
ㅇ 오버라이딩 (Overriding)
- (사전적 의미) 위에 덮여쓰다 : 즉, 변경(재정의)
- 주로, 상위 클래스에서 정의된 메소드의 구현내용을 하위 클래스에서 바꾸기 위하여 사용
. 상위 클래스로부터 상속 받은 메서드의 내용을 자신에 맞게 변경(재정의)하는 것
. 즉, 부모 클래스에서 개략 정의된 동작을, 자식 클래스에서 좀 더 구체화시켜,
재정의(오버라이딩)하는 것
- 상속 관계에서 만 가능
- 조건 : 메소드명,인수의 타입,인수의 개수,리턴 타입 모두 동일 해야 함
- 바인딩 방식 : 동적 바인딩 (실행시에 결정)
ㅇ 오버로딩 (Overloading)
- (사전적 의미) 과적(過積), 과 부하(過負荷)
- 주로, 클래스의 상속시에, 기존에 없던 새로운 메서드를 추가하는 것
. 어떤 메소드의 구현내용을 다양하게, 다른 형태로 동시에 제공키 위해 사용
. 즉, 적당한 연산자나 메소드를 골라 쓸 수 있게 함
.. 例) 함수 오버로딩, 메소드 오버로딩, 연산자 오버로딩
- 동일 클래스 내 또는 상속 관계 둘 다 가능
- 조건 : 메소드명 만 같으면 됨
- 바인딩 방식 : 정적 바인딩 (컴파일시에 결정)