본문 바로가기
OOP

[OOP] 정적 바인딩 vs 동적 바인딩

by 태크민 2024. 11. 6.

바인딩(binding)이란?

 

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

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

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

 

 

즉, 아래와 같이 정리해볼 수 있겠다.

 

* 함수의 바인딩

- 함수를 만들어 컴파일을 하면 각각의 코드가 메모리 어딘가에 저장된다.

그리고 함수를 호출하는 부분에는 그 함수가 저장된 메모리 번지수(주소값)이 저장된다.

 

프로그램 실행 → 함수 호출 → 함수가 저장된 주소로 점프 → 함수 실행 → 원래 위치

 

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

 

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

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

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

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

* 빌드 중에 이루어진다.  

 

즉, 컴파일 시간에 호출될 함수로 점프할 주소가 결정되어 바인딩 되는 것.

메소드 호출이나 필드 접근이 컴파일 타임에 결정된다.  주로 static 메소드나 private 메소드에서 발생하며, 런타임에서 변화하지 않는다.

 

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

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

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

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

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

 

즉, 실행 파일을 만들 때 바인딩 되지 않고 보류 상태 둔다.

메소드 호출이 런타임에 결정된다.. 주로 메소드 오버라이딩을 통해 다형성을 구현할 때 발생하며, 실제 객체 타입에 맞는 메소드가 호출된다.

 

예시!

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

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

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

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

 

장단점은?

[정적바인딩]

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

 

[동적바인딩]

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

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

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

 

java에서는?

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

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

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

 


참고자료

https://todayscoding.tistory.com/16

 

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

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

todayscoding.tistory.com

https://secretroute.tistory.com/entry/140819

 

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

* Binding - 프로그램 구성 요소의 성격을 결정해주는 것ex ) 변수의 데이터 타입이 무엇인지 정해지는 것 종류정적 바인딩(Static binding) 동적 바인딩(Dynamic binding) 정의 컴파일 시간에 성격이 결정되

secretroute.tistory.com

https://velog.io/@ghkvud2/%EC%A0%95%EC%A0%81-%EB%B0%94%EC%9D%B8%EB%94%A9%EA%B3%BC-%EB%8F%99%EC%A0%81-%EB%B0%94%EC%9D%B8%EB%94%A9

 

정적 바인딩과 동적 바인딩

바인딩(binding)이란 프로그램에 사용된 구성 요소의 실제 값 또는 프로퍼티를 결정짓는 행위를 의미합니다.예를 들어 함수를 호출하는 부분에서 실제 함수가 위치한 메모리를 연결하는 것도 바

velog.io