반응형
함수 바인딩 (Funciton Binding)
표현식을 어느 함수와 연결할지 결정하는 과정
[예제] function binding
#include <iostream>
class Animal
{
public:
// static binding
void Cry1() { std::cout << "static binding Animal..." << std::endl; } // 1
// dynamic binding
virtual void Cry2() { std::cout << "dynamic binding Animal..." << std::endl; } // 2
};
class Dog : public Animal
{
public:
void Cry1() { std::cout << "static 멍멍" << std::endl; } // 3
virtual void Cry2() { std::cout << "dynamic 멍멍" << std::endl; } // 4
};
int main()
{
Dog d;
Animal* p = &d;
p->Cry1(); // ??? -> 1
p->Cry2(); // ??? -> 4
}
✔️ static binding (early binding)
• 컴파일러가 컴파일 시간에 함수 호출 결정
• 컴파일러가 실제 어느 객체를 가리키는지 컴파일 시간에 알 수 없는 경우
타입을 가지고 함수 호출 결정
→ 빠르지만 논리적이지 않다.
→ C++ non-virtual funciton
✔️ dynamic binding (late binding)
• 컴파일 시간에 가리키는 곳을 조사하는 기계어 코드 생성
• 실행 시간에 가리키는 곳을 조사 후 실제 메모리에 있는 객체 따라 함수 호출
→ 느리지만 논리적
→ C++ virtual funciton + Java, Python 등
반응형
'프로그래밍 언어 > C++' 카테고리의 다른 글
[C++] 가상 소멸자 (3) | 2025.02.24 |
---|---|
[C++] mutable 키워드 (1) | 2025.02.21 |
[C++] 상수 멤버함수 const member function (5) | 2025.02.19 |
[C++] return by reference (4) | 2025.02.15 |
[C++] class this 키워드 (8) | 2025.02.08 |
댓글