[C++] 다형성(Polymorphism)
카테고리: Cpp
태그: Inheritance
이 글은 C++ 다형성(Polymorphism) 공부하고 정리한 글입니다
다형성
- 부모 클래스에 공통된 함수를 선언하고 자식 클래스에서 재정의해 사용하는 것
- 쉽게 말하면 “같은 지시, 다른 동작” 입니다
바인딩
- 프로그램에 사용된 구성 요소의 실제 값 또는 프로퍼티를 결정짓는 행위
-
예를 들어 함수를 호출하는 부분에서 실제 함수가 위치한 메모리를 연결하는 것도 바로 바인딩
정적 바인딩
- 컴파일 시에 할당한다
- 무늬(변수의 클래스) 따라 가겠다라고 생각해라
- 만약 Animal을 상속받는 Cat이 있을 때
- 이 경우에는 Cat 클래스에 있는 함수
Speak()
가 호출되고Cat* myCat = new Cat(); myCat->Speak();
- 이 경우에는 Animal 클래스에 있는 함수
Speak()
가 호출된다Animal* yourCat = new Cat(); yourCat->Speak();
동적 바인딩
- 프로그램 실행 중에 가상 함수 테이블이 만들어진다
-
클래스가 가상 함수를 포함하면 그 클래스는 동적 바인딩을 한다
가상함수
virtual void Animal::Speak() { ... }
- 함수 앞에
virtual
키워드 붙어있는 함수 - 자식의 클래스의 멤버함수가 언제나 호출됨
- 부모의 포인터 또는 참조를 사용 중이더라도
- 동적(dynamic) 바인딩 / 늦은(late) 바인딩
- 실행 중에 어떤 함수를 호출할지 결정한다
- 가상 함수를 찾아 갈 때 가상 함수 테이블을 거쳐 가기 때문에 정적 바인딩보다 느림
- 이를 위해 가상 함수 테이블이 생성됨
- 모든 가상 멤버함수의 주소를 포함
가상 함수 테이블
- 컴파일러가 한개 이상의 가상 함수를 포함하는 클래스에 대해 가상함수 테이블을 생성
- 가상 함수 포인터를 모아둔 배열
- 가상 함수가 호출 될 때 해당 함수의 포인터를 가져와 사용한다
- 함수 앞에
참조
💻 열심히 공부해서 작성 중이니 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 알려주시면 감사하겠습니다! 😸
댓글 남기기