C++/자료

C++ 정적바인딩 동적바인딩

mane 2022. 1. 7. 16:11
728x90
반응형

1. 바인딩(Binding)이란?

프로그램 소스에 쓰인 각종 내부 요소, 이름 식별자들에 대해 값 또는 속성을 확정한 과정을 바인딩이라고 한다.

 

2. 정적 바인딩(Static Binding)이란? 

바인딩의 정의에서 보는 바와 같이 바인딩 과정이 컴파일 시점에 이루어지는 바인딩을 정적 바인딩이라고 한다. 아래의 예제 소스는 int라는 타입을 갖고, a라는 이름의 변수명으로 선언이 되어 있다. 이처럼 소스상에 명시적으로 타입과, 그 타입의 변수명을 선언하는 것을 정적 바인딩(Static binding)이라고 한다. 

int main()
{
    int a = 0;
}​

 

1) 장점

(1) 컴파일시 타입에 대한 정보가 결정되기 때문에 속도가 빠르다.

(2) 타입 에러로 인한 문제를 조기에 발전할수 있어서 안정적이다.  

2) 단점

(1) 컴파일시 결정이 되고 그 이후 변경이 불가능하다. 

 

3. 동적 바인딩(Dynamic Binding) 이란?

바인딩 과정이 실행 도중 이루어지는 바인딩을 동적 바인딩이라고 한다. 아래 예제 소스를 예로 보자. print()라는 함수는 클래스 A에 가상함수로 선언되었고 클래스 B는 클래스 A를 상속받아 print() 함수를 재정의 하였습니다. 이 때 main()함수에서 클래스 A를 선언하여 print()를 호출할 경우 클래스 A의 print()함수가 호출되며 a 객체를 B클래스 객체의 포인터로 변경을 할경우 B클래스의 print() 함수가 호출된다. 이 과정은 실행 도중 print()함수가 A클래스의 print() 함수에서 B클래스의 print() 함수로 변경이 된다. 포인터가 가리키는 객체에 따라 호출되는 함수가 변경되는 것을 동적 바인딩이라고 한다. 

class A
{
     virtual void print() {}
}

class B : A
{
     overrid void print() {}
}

int main()
{
     A* a = new A();
     a->print();

     B* b = new B();
     a = b;
     a->print();
}​

 

1) 장점

(1) 실행도중 필요한 객체의 함수를 호출함으로써 유연성을 갖고 있다.

2) 단점

(1) 변수의 예상치 못한 타입으로 인해 안정성이 저하된다.

728x90
반응형