C++ 다형성 핵심

가상 함수 호출 경로

다형성은 포인터 타입이 아니라 실제 객체 타입의 구현을 실행하도록 호출 지점을 늦게 결정하는 구조입니다.

Base* p공통 인터페이스
virtual call
vtable lookup실제 객체 타입 확인
dispatch
Derived::draw()파생 구현 실행
01

기반 포인터 유지

Base* 또는 Base&로 파생 객체를 가리켜 공통 인터페이스를 유지합니다.

02

virtual 선언

오버라이드될 함수에 virtual을 붙여 실행 시점 결정을 허용합니다.

03

override 확인

파생 클래스 구현에는 override를 붙여 시그니처 실수를 막습니다.

04

소멸자 점검

다형적 삭제가 있으면 기반 클래스 소멸자는 virtual이어야 합니다.

설계 기준

  • 값으로 받는 함수는 파생 부분이 잘려 다형성이 사라질 수 있습니다.
  • 상속 계층의 공통 동작만 기반 클래스 인터페이스에 남깁니다.
  • 런타임 분기가 목적이면 조건문보다 가상 함수가 더 명확한지 봅니다.

키워드 역할

virtual동적 바인딩 허용
override재정의 검증
final추가 재정의 차단