본문 바로가기
Dev Note/else

정적 바인딩(Static binding) vs 동적 바인딩(Dynamic binding)

by iyos 2020. 10. 7.

바인딩(binding)이란?

네이버 지식백과

네이버 지식백과에서 찾아보면 바인딩은 '컴퓨터 프로그래밍에서 각종 값들이 확정되어 더 이상 변경할 수 없는 구속(bind) 상태가 되는 것' 으로 설명되어있다. 

즉, 프로그래머가 코딩을 해서 컴파일을 하게 되면 각각의 코드가 메모리 어딘가에 저장되고, 함수를 호출하는 부분에는 그 함수가 저장된 메모리의 주소값이 저장되며 프로그래머가 값을 변경할 수 없는 상태가 된다.

여기서 함수를 호출하는 부분(호출부)에 함수가 위치한 메모리 번지(정의부)로 연결시킨 것을 바인딩이라고 한다!

 

정적바인딩(Static binding)이란?

실행 이전에 값이 확정되면 정적 바인딩이라고 한다.

컴파일 타임에 호출될 함수가 결정되는 것으로, 함수는 기본적으로 정적 바인딩된다.

컴파일러는 선언되어있는 자료형을 보고 바인딩을 하기 때문에 실제로 가리키는 객체가 무엇이든 포인터의 자료형을 기반으로 호출의대상을 결정한다.

* 빌드 중에 이루어진다.  

 

동적 바인딩(Dynamic binding)이란?

실행 이후에 값이 확정되면 동적 바인딩이라고 한다.

런타임에 호출될 함수가 결정되는 것으로, virtual 키워드를 통해 동적 바인딩하는 함수를 가상 함수라고 한다.

함수가 가상 함수로 선언이 되면, 포인터 변수가 실제로 가리키는 객체에 따라 호출의 대상이 결정된다.

* 실행 파일을 만들 때 바인딩 되지 않고 보류 상태 둔다.
* 실행 시간에 실제로 사용된 객체의 클래스형에 의해 호출될 함수가 결정됩니다.  
* 점프할 메모리 번지를 저장하기 위한 메모리 공간(4 byte)을 가지고 있다가 런타임에 결정.

 

예시!

int a=1; 를 예로 생각해보자.

Data Type으로 int가 바인딩 되는 것은 프로그램을 컴파일 할 때 메모리에 할당되므로 정적 바인딩이다.

a라는 변수명 또한 컴파일 할 때 메모리에 할당되므로 정적 바인딩이다.

하지만 1은 실행 시에 값으로 할당되므로 동적 바인딩이다.

 

장단점은?

[정적바인딩]

- 장점 : 정적 바인딩컴파일 시 이미 값이 확정되어있기 때문에 실행시 효율이 높아진다. 값이 변하지 않아서 안정적이다.

 

[동적바인딩]

- 장점 : 유연하고 값이 변할 수 있다.

- 단점 : 어떤 값이 들어올지 몰라서 들어올 값보다 많은 메모리 공간을 차지하고 있기 때문에 메모리 공간이 낭비될 수 있다.

             들어오는 값이 메모리 타입에 맞는지 확인하기 때문에 속도가 늦어진다.

 

java에서는?

자바에서는 메소드를 기본적으로 동적 바인딩 하기 때문에 메소드 오버라이딩이 가능하다!

또한 static으로 선언하는 것은 메모리를 한 번밖에 할당하지 않기 때문에 컴파일 시에 메모리에 할당된다.

따라서 static으로 선언된 것은 모두 정적 바인딩이다.

반응형