1 minute read

바인딩(binding)이란?

바인딩은 속성과 개체 사이 또는 연산과 기호 사이와 같은 ‘연관’이다. ‘묶다’의 의미를 가지고 있는데, 변수와 배열 등의 변수, 그리고 그에 해당하는 값을 묶는다.

간단한 예시로 바인딩에 대해 좀 더 살펴보자.

int count;
count = count + 1;

여기에 대해 고려할 수 있는 바인딩과 바인딩 시간은 다음과 같다.

  • count에 대한 가능한 타입의 집합은 언어 설계 시간에 바인딩 된다.

    ex) int, long, float 등

  • count의 타입은 컴파일 시간에 바인딩 된다.

    ex) int에 대응

  • count의 가능한 값들의 집합은 컴파일러 설계 시간에 바인딩 된다.

    ex) int형 값의 범위 (-???? ~ +????)

  • 연산자 기호 ‘+’에 대한 가능한 의미의 집합은 언어 구현 시간에 바인딩 된다.

    ex) 수치 연산과 문자열 결합

  • 연산자 기호 ‘+’의 의미는 컴파일 시간에 피연산자의 타입이 결정되었을 때 바인딩 된다.

    ex) 피연산자인 count와 1은 int형이므로 수치 연산으로 바인딩
    
  • 리터럴 1의 내부 표현은 컴파일러 설계 시간에 바인딩 된다.

    ex) 바이트 코드로 00001001로 표현

  • count의 값은 이 배정문의 실행 시간에 바인딩 된다.

    ex) count가 가리키는 메모리 공간에 1을 저장

바인딩도 크게 두 가지 종류로 나눌 수 있다.

  1. 정적 바인딩

→ 정적, 고정적으로 묶는다. 컴파일, 링크, 로드를 할 때 진행되는 바인딩을 일컫는다. 즉, 실행 시간(run time) 전에 일어난다고 보면 된다. 실행 중 변하지 않는 상태로 유지되는 바인딩이다.

ex) int a; //integer 타입을 이름 a에 정적으로 바인딩

  1. 동적 바인딩

→ 동적으로 묶는다. 로더의 4단계에는 allocation-linking-relocation-load가 있고 이후에 프로그램이 실행되는데, 이 실행 단계에서 이루어지는 바인딩을 동적 바인딩이라고 한다. 정적 바인딩보다 상대적으로 늦게 하기 때문에 늦은 바인딩이라고 불린다고도 한다. 실행 시간 중에 일어나거나 프로그램 실행 과정에서 변경되는 바인딩이다. (즉, 정적 시간대에 바인딩 되었어도 실행하다가 바뀐다면 동적 바인딩이라고 함)

ex) ptr = new int; // 할당한 기억 장소를 y에 동적으로 바인딩

바인딩 타임(binding time)이란?

이러한 바인딩이 일어나는 시간을 바인딩 타임(binding time)이라고 부른다. 바인딩은 언어 설계 시간, 구현 시간, 컴파일 시간, 링크 시간, 적재 시간, 또는 실행 시간에 일어날 수 있다.

  1. 언어 설계 시간

언어에서 허용되는 대부분의 자료구조나 프로그램 구조를 확정하는 시간.

ex) 혼합용 연산 시 어떤 연산을 먼저 수행할지 판단.

  1. 언어 구현 시간

특정 기종에 구애받지 않는 호환성을 갖기 위한 과정. 언어 정의 시 원소에 대한 특성을 모두 한정하지 않고 구현할 때 일부를 확정하도록 일임한다.

ex) 정수의 자릿수, 실수의 유효 숫자 개수 등

  1. 컴파일 시간

정적 바인딩. 변수의 이름 또는 형과 프로그램 문장 구조 등을 확정할 때 걸리는 시간이며, 효율성을 중시한다.

  1. 링크 시간

부프로그램 코드로 라이브러리에서 부프로그램을 호출할 때 걸리는 시간.

  1. 적재 시간

변수를 실제 메모리로 적재할 때 소요되는 시간.

  1. 실행 시간

프로그램을 실행하면서 변수의 값을 확정할 때 걸리는 시간.

Tags:

Categories:

Updated:

Leave a comment