C++) 20. 다형성

2021. 3. 27. 09:19C++

728x90

1) 다형성

 

다형성의 특징은 모양은 똑같지만 기능이 다르게 동작하는 것입니다.

 

다형성의 예로는 두 가지가 있습니다.

 

① 오버로딩 = 함수 중복 정의 = 함수 이름의 재사용

 

② 오버라이딩 = 재정의 = 부모 클래스의 함수를 자식 클래스에서 재정의

 

간단한 예제를 보겠습니다.

 

두 수의 합을 구하는 함수를 같은 이름으로 두 가지를 구현해보았습니다.

 

위와 같이 재정의를 하는 것을 오버라이딩이라고 합니다.


2) 바인딩

 

함수에서 바인딩은 어떤 코드에서 함수가 호출될 때 그 함수가 위치한 메모리로 연결을 해주는 것입니다.

 

간단한 예를 들어보겠습니다.

 

위와 같은 클래스가 있고

 

위와 같이 Move함수를 호출해주는 함수가 있다고 가정해보겠습니다.

 

그리고 main함수에서 객체를 선언하고 TestMove함수를 호출하였습니다.

 

이렇게 되면 컴파일러가 자동으로 바인딩을 하여 매개변수로 넘겨준 player의 Move함수를 호출하게 됩니다.

 

바인딩은 두 가지가 있습니다.

- 정적 바인딩 : 컴파일 단계에서 실행 결정
- 동적 바인딩 : 실행 시점에서 실행 결정

일반함수는 정적 바인딩을 사용하게 됩니다.

 

동적 바인딩을 사용하고자 하면 가상 함수(virtual function)를 사용해야 합니다.

 

간단한 예시를 들어보겠습니다.

 

이번에는 knight의 Move를 호출하고자 합니다. 하지만 TestMove함수는 Player의 Move를 가리키고 있기 때문에 컴파일러는 Player의 Move를 호출하게 됩니다. 이때 가상 함수를 활용할 수 있습니다.

 

void앞에 virtual을 붙여주고 Move가 가상함수라는 것을 가독성을 높이기 위해 VMove라고 다시 정의하였습니다.

 

그리고 위와 같은 TestMove함수를 호출하였습니다.

 

Knight클래스의 VMove함수가 제대로 호출된 것을 알 수 있었습니다.

728x90

'C++' 카테고리의 다른 글

C++) 22. 동적할당  (0) 2021.04.01
C++) 21. static  (0) 2021.03.31
c++) 19. 은닉성(캡슐화)  (0) 2021.03.27
C++) 18. 상속성  (0) 2021.03.26
C++) 17. 생성자와 소멸자  (0) 2021.03.25