개인적으로다형성이란 객체지향의 꽃이라고 할 수도 있다고 생각합니다.
상속을 완벽하게 하기 위해 다형성을 사용해야하니까요.
다형성(Polymorphism)이란 프로그래밍에서는 다양한 종류의 객체에게 동일한 메시지를 보내더라도 각 객체들이 서로 다르게 동작을 하는 특성을 말합니다.
예를 들어, 동일한 이름의 함수를 호출하더라도 매개변수에 따라 다른 함수가 실행되는 함수 중복(Function Overloading => 보통 오버로딩이라고 부름)도 다형성의 일종입니다.
상속 관계에서 함수 재정의(Function Overriding => 보통 오버라이딩이라고 부름)의도 다형성을 보여주는데,
함수의 이름과 매개변수가 같더라도 메시지를 보내는 객체의 타입에 따라 다른 동작이 가능하도록 허용합니다.
이러한 다형성은 매우 매우 중요합니다.
- 함수 중복은 동일한 이름의 함수라도 인수의 개수와 자료형에 따라 여러 가지 함수가 실행될 수 있습니다.
함수 중복은 소스 코드를 컴파일 하는 과정에 실제로 어떤 함수가 실행되어야 할지를 알 수 있어,
그 함수를 연결해주기 때문에 컴파일 시간 다형성이라 불리며, 정적 다형성(static binding)을 사용합니다.
- 연산자 중복은 동일한 연산자를 다양한 용도로 사용하는 방법을 제공하며,
컴파일 시간 다형성이라 불리며, 정적 다형성을 사용합니다.
- 클래스가 객체를 만드는 틀이라면 템플릿은 클래스를 만드는 틀입니다.
템플릿은 타입 매개변수에 따라 새로운 클래스를 만드는 방법을 제공하고,
따라서 파라메터형 다형성이라고 합니다.
템플릿도 컴파일 시간 다형성이라 불리며, 정적 다형성을 사용합니다.
- 이상의 방법들은 모두 컴파일 과정에 실제로 호출될 함수가 결정되는 컴파일 시간 다형성입니다.
객체지향 언어인 C++에서는 실행시간(runtime) 다형성을 제공합니다.
이 것은 가상 함수(virtual function)를 통한 동적 바인딩(dynamic binding)을 이용하는 기법입니다.
이 방법의 특징은 컴파일 시에 실제로 어떤 함수가 실행되어야 할지 결정할 수가 없다는 것입니다.
따라서 실행 시에 결정할 수밖에 없습니다.
'C++ 프로그래밍 > 클래스' 카테고리의 다른 글
다형성-가상 함수와 객체의 크기 (0) | 2022.08.22 |
---|---|
다형성-가상 함수와 동적 바인딩의 의미 (0) | 2022.08.12 |
다형성-상속에서의 형 변환 (0) | 2022.08.12 |
상속 (0) | 2022.08.08 |
.과 ->의 쓰는 용도 (0) | 2022.08.04 |