* 다형성이란?
부모 Class의 포인터로 자식객체를 가리킬 수 있다는 점과, 이런 경우에도 가상함수를 통해서 알맞은 자식 class의 함수가 호출된다는 점이 다형성을 지원하는 C++의 기능이다. 즉, 객체간의
연결을 유연하게 해주는 원동력이 된다.
* 동적바인딩과 정적 바인딩
(1) 바인딩(Binding)이란? 프로그램 소스에 쓰인 각종 내부요소,이름 식별자들에 대해 값 또는 속성을 확정한 과정.
함수 주소를 찾아가는 과정이다.
(2) 정적 바인딩(Static Binding)과 동적 바인딩(Dynamic Binding)
: 바인딩 과정이 컴파일 시점에 이루어지느나, 실행 도중 이루어지느냐에 따라 나뉩니다.
- 정적 바인딩 ? 바인딩 과정이 컴파일 시점에 이루어지는 바인딩.
소스상에 명시적으로 int a = 0; 과 같이 타입과 타입의 변수명을 선언하는 것을 정적 바인딩이라고 한다.
> 장점? 컴파일시 타입에 대한 정보가 결정되어 있어서 속도가 빠르며, 안정적이다.
> 단점? 컴파일시 결정이 되고, 그 이후 변경이 불가능하다.
- 동적 바인딩 ? 바인딩 과정이 실행도중 이루어지는 바인딩.
가상함수가 정의되어 있는 경우, 사용된다.
> 장점? 실행도중 필요한 객체의 함수를 호출하므로 유연성을 가지고 있다.
> 단점? 변수의 예상치 못한 타입으로 인해 안정성이 저하된다.
위의 예제를 보면 Person을 선언하여 print를 호출하였으므로 Person의 함수가 호출된다.
이후에 Person클래스를 JinSoo클래스 객체로 변경을 한 경우 Jinsoo의 print함수가 호출된다.
이 과정은 실행 도중 print함수가 부모클래스에서 자식클래스 함수로 변경이 된다.
포인터가 가리키는 객체에 따라 호출되는 함수가 변경이 되는 것이 동적바인딩이다.
* 상속에서의 오버로딩과 오버라이딩
부모 Class의 함수가 오버로딩 되어 있는 경우, 자식클래스에서 일부의 함수만 오버라이드 할 경우 오류가 발생한다.
부모 클래스에서 오버로드 된 함수를 모두 오버라이드 해야한다.
이 문제는 가상함수로 만들어도 같은 오류가 발생 하였다.
'STUDY > C++' 카테고리의 다른 글
new 와 new []의 차이점 (0) | 2019.06.10 |
---|---|
[ STL ] 표준 시퀀스 컨테이너(vector, deque, list) (0) | 2018.03.12 |
Class내에서의 Static (0) | 2018.02.27 |
[ Const 2편 ] Class에서의 Const초기화 (0) | 2018.02.27 |
[ Const 1편 ] 변수와 함수에서의 Const (0) | 2018.02.26 |