프로그래밍 언어/C++

[C++] 함수 바인딩 (Funciton Binding)

까망 하르방 2025. 2. 22. 18:49
반응형

함수 바인딩 (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  등

반응형