프로그래밍 언어 의미론에서 매우 중요한 개념인 바인딩을 한번 다뤄보겠습니다!.!
Binding을 한마디로 이름을 속성에 연관 시키는 과정이라고 할 수 있다. 일반적인 의미에서 속성과 개체 사이 or 연산과 기호 사이와 같은 연관이다.
바인딩은 언어 설계시간, 언어 구현시간, 컴파일 시간, 링크 시간, 적재 시간 또는 실행 시간에 일어날 수 있다. 바인딩이 일어나는 시간을 바인딩 시간이라고 부른다.
이름에 속성이나 값이 연결되는 시점으로 개념적으로는 설계, 코딩, 컴파일, 실행, 번역, 언어의 구현, 정의 등 프로그래밍 전 과정에 걸쳐 일어나나 일반적으로 컴파일 시간에 일어나는 정적 바인딩과, 실행 시간에 일어나는 동적 바인딩을 의미한다.
따라서 바인딩 타임이란 프로그램에서 변수들이 갖는 속성이나 값이 완전히 결정되는 시간을 말하며, 이름에 속성이 연결되는 시간을 뜻한다.
위에서 언급한 정적 바인딩과 동적 바인딩을 정리한 표이다.
언어에서 허용되는 대부분의 자료구조나 프로그램 구조 등을 확정 시키는 시간이다. 대부분의 언어에서 제어 흐름 구조, 기본 유형 집합, 복잡한 유형을 만드는데 사용할 수 있는 생성자 및 언어론의 많은 측면들이 언어를 설계할 때 선택된다.
ex) 혼합형 연산 허용 시 어떤 연산을 수행할 것인가 등을 확정
언어 정의 시 원소에 대한 특성을 모두 한정치 않고 구현 시 일부 확종토록 일임. 대부분의 언어들이 구현 시 바인딩을 최소화하여 특정기종에 구애받지 않도록 한다.
ex) 정수의 자리 수, 실수의 유효숫자 개수, I/O, 스택과 힙의 최대 크기
메모리에 정적으로 정의된 데이터의 레이아웃, 기계어의 상위 수준의 구성의 매핑을 선택하는 시간이다. 정적 바인딩, 변수의 이름 또는 형과 프로그램 문장 구조 등 확정, 효율성 중시
링크 시간: 코드내에서 사용된 라이브러리 모듈들 링크
적재 시간: 프로그램을 실행하려고 메모리로 불러오는 시점
실행시간에 일어나는 바인딩으로 변수의 값을 확정하거나 변수에 기억 주소 할당
생명주기, 수명 변수의 수명은 메모리 공간에 바인딩 될 때 시작되어 회수될 때 끝난다
변수에 메모리 공간이 정적으로 할당되는 것으로 한번 할당되면 프로그램이 종료될 때까지 할당 상태가 유지된다. 정적할당된 것들은 데이터 영역으로 들어간다.
자동 할당이라고도 하며 변수의 타입은 정적으로 할당되지만 메모리 공간을 실행 중에 할당한다. 이름과 같이 메모리 공간은 스택에 저장된다.
명시적인 명령어에 의해 실행되는 할당되는 것이다. 동적할당이 이루어지는 메모리 공간은 힙이다. 동적으로 할당된 영역은 포인터나 참조변수를 통해서 참조 가능하다