프로그래밍 언어/C & C++ 정리

동적 바인딩 정적 바인딩

게임 개발 2024. 6. 5. 15:04

 

바인딩이란?

 

"컴퓨터 프로그래밍에서 각종 값들이 확정되어 더 이상 변경할 수 없는 구속(bind) 상태가 되는 것"
프로그램 내에서 변수, 배열, 라벨, 절차 등의 명칭,
즉 식별자가 그 상대인 메모리 주소, 데이터형 또는 실제값으로 배정되는 것이 이에 해당되며,
원시 프로그램의 컴파일링 또는 링크 시에 확정되는 바인딩을 정적 바인딩이라 하고,
프로그램의 실행되는 과정에서 바인딩되는 것을 동적 바인딩이라고 한다.
프로그래밍에서는 바인딩을 가급적 뒤로 미루도록 권고하고 있다.

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


 

정적 바인딩이란?

 
실행 이전에 값이 확정되면 정적 바인딩이라고 한다.
컴파일 타임에 호출될 함수가 결정되는 것으로, 함수는 기본적으로 정적 바인딩된다.
컴파일러는 선언되어있는 자료형을 보고 바인딩을 하기 때문에 실제로 가리키는 객체가 무엇이든
포인터의 자료형을 기반으로 호출의 대상을 결정한다.
즉 빌드 중에 이루어진다.
 
 

동적 바인딩이란?

 
실행 이후에 값이 확정되면 동적 바인딩이라고 한다.
런타임에 호출될 함수가 결정되는 것으로,
virtual 키워드를 통해 바인딩하는 함수를 가상 함수라고 한다.
함수가 가상 함수로 선언이 되면,
포인터 변수가 실제로 가리키는 객체에 따라 호출의 대상이 결정된다.
즉, 실행 파일을 만들 때 바인딩 되지 않고 보류 상태로 둔다.
실행 시간에 실제로 사용된 객체의 클래스형에 의해 호출될 함수가 결정된다.
점프할 메모리 번지를 저장하기 위한 메모리 공간 4byte를 가지고 있다가 런타임에 결정된다.
 
 
컴파일 시 = 정적 바인딩
런타임 시 = 동적 바인딩
 
 

장단점은 무엇일까?

 

정적 바인딩

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

동적 바인딩

- 장점 : 유연하고 값이 변할 수 있다.
- 단점 : 어떤 값이 들어올지 몰라서 들어올 값보다
많은 메모리 공간을 차지하고 있기 때문에 메모리 공간이 낭비될 수 있다.
들어오는 값이 메모리 타입에 맞는지 확인하기 때문에 속도가 늦어진다.

C++에서는 동적 바인딩을 사용하기 위해서는 virtual 키워드를 사용해야한다.

추가로
virtual 키워드는 다형성을 구현하기 위해 사용된다.
이를 통해 파생 클래스에서 함수를 재정의하여,
런타임에 올바른 함수가 호출되도록 한다.


다형성을 구현하기 위해 C++에서 이용하는 방식은
override 와 overload 가 있다.

override는 상속관계의 가상 함수를 재정의하는 것이며

overload은 이름이 같은 함수를 매개변수의 수와 자료형을 바꿔가며 사용하기 위함이다.

둘의 공통점은 이름이 같은 함수를 만들 수 있다는 점이다.

'프로그래밍 언어 > C & C++ 정리' 카테고리의 다른 글

파일 읽고 쓰기 - C언어  (0) 2024.07.05
함수와 스택 그리고 호출 스택  (1) 2024.06.25
재귀함수  (1) 2024.04.19
L-value, R-value  (0) 2024.04.11
구조체 바이트 패딩 규칙  (0) 2024.04.11