바인딩과 가상함수

2014. 3. 3. 10:17프로그래밍/용어정리

바인딩(Binding)

- 바인딩이란 함수 호출과 실제 함수를 연결하는 방법이다.

- 정적 바인딩과 동적 바인딩이 있다.

- 기본적으로 정적 바인딩을 수행한다.

- 동적 바인딩은 virtual 예약어를 사용해서 함수를 정의해야 한다.

 

* 정적 바인딩 (Static Binding)

- 정적 바인딩은 컴파일 타임에 호출될 함수를 결정한다.

- 객체나 타입을 보고 호출할 함수를 결정한다.

 

* 동적 바인딩 (Dynamic Binding)

- 동적 바인딩은 런 타임(실행 중)에 호출될 함수를 결정한다.

- virtual 예약어를 사용해서 가상함수를 정의해야 한다.

- 호출 함수 결정은 객체의 가상함수 Table을 사용한다.

 

* 가상함수 (Virtual Function)

- Virtual 예약어를 붙여 정의된 함수는 런 타임 시, 포인터가 가리키는 타입에 따라 호출할 함수를 결정

- 포인터가 어떤 객체를 가리키는 가에 따라 호출될 함수를 결정할 수 있다.

- 이를 통해 다형성을 구현할 수 있다.

 (출처 - 네이버 카페 취업스토리)


바인딩이란 프로그램 소스에 쓰인 각종 내부요소 혹은 속성을 확정 짓는 과정을 의미하는데, 이 과정이 컴파일 시에 이루어지면 정적바인딩, 프로그램 실행 시에 이루어지면 동적바인딩이라고 한다.

 

동적바인딩의 경우 실행 중에 호출될 함수가 결정됨으로 정적바인딩에 비해 속도가 떨어지며, 함수의 메모리 번지를 저장하기 위해 4바이트의 메모리를 추가로 사용한다.

 

그럼에도 동적바인딩을 사용하는 이유는 다형성을 구현하기 좋기 때문이다.

앞선 오버라이딩 포스팅을 예로들면 재 정의된 함수를 사용하기 위해 각각의 객체를 따로 호출하였다. 이는 사실 다형성과는 거리가 멀다.

 

하지만 Virtual 함수를 이용해 동적바인딩을 사용하면 이 문제를 해결 할 수있다.

 

 

//부모클래스입니다

class pitching{

public:

//가상함수 선언

    virtual void speed()

    {

        cout << "속도110km" << endl;

    }

};

 

//피칭클래스를 상속받는 아마추어 클래스입니다

class amateur:public pitching

{

};

 

//피칭클래스를 상속받는 프로페셔널 클래스입니다

class pro:public pitching

{

public:

    //함수 재정의 오버라이딩

    virtual void speed()

    {

        cout << "속도150km" << endl;

    }

};

 

void main()

{

    //피칭객체생성

    pitching *Player;

    

Player = new amateur;

    Player->speed();

 

    Player=new pro;

    Player->speed();

}


결과


'프로그래밍 > 용어정리' 카테고리의 다른 글

전처리기란?  (0) 2014.11.29
함수와 서브루틴?  (0) 2014.11.12
오버라이딩, 오버로딩과의 차이점  (0) 2014.02.28
오버로딩  (0) 2014.02.26