본문 바로가기
척척학사/프로그래밍 언어론

변수와 바인딩

by 학사쟁이 2023. 10. 12.
반응형

변수란?

프로그램에서 처리할 데이터를 저장관리할 수 있도록 메모리를 추상화한 것

int x12; →변수 x12를 저장할 공간을 만든다.
x12 = 1 + 5 * 2; →만들어진 공간에 저장한다.
if x12 > 10 then....  →변수 x12에 저장된 값을 불러온다.

변수의 속성

  • 변수명  ▷ 변수의 이름, 식별자
  • 타입  ▷ 변수에 저장할 수 있는 데이터 집합의 종류로 자료형이다.(int 등)
  • 주소 ▷ 변수가 사용하는 메모리의 위치
  • 값  ▷ 변수에 저장된 데이터로 수행시간 동안 변경될 수 있다.

바인딩

바인딩이란 언어구성 요소의 속 시잉 구체적으로 결정되는 것을 말한다.

int x12;  → int를 4바이트 정수형으로 바인딩(언어 구현 시점)  / 변수명을 x12로 바인딩 (컴파일 시점)
x12  = 1 + 5 * 2;  → = 을 대입연산자로 바인딩(언어의 정의 시점) / *를 곱셈 연산자로 바인딩(언어의 정의 시점) / 변수 x12의 값을 11로 바인딩( 프로그램 수행시점)
if x12  > 10 then....   →  >을 대입연산자로 바인딩(언어의 정의 시점(

 

바인딩 시각

바인딩 시각 예시
언어의 정의 시점 연산자의 의미, 수의의미등
언어의 구현 시점 타입의 자릿수, 수의 표기법등
컴파일 시점 변수의 타입 등
링크 시점 라이브러리 함수의 내용등
로드 시점 변수의 주소등
프로그램 수행 시점 변수의 값 등
  • 정적 바인딩
(프로그램 수행이전에 다결정 되는 것)
프로그램을 수행하는 시점에 바인딩의 변화가 없는 경우 
언어의 정의시점, 언어의 구현 시점 컴파일 시점, 링크 시점, 로드 시점의 바인딩이 포함된다.
프로그램 수행시간의 효율성이 높다.
컴파일 방법에 적합하다.
  • 동적 바인딩
(프로그램 수행할 때 무언가를 한 것)
프로그램 수행시점에 바인딩의 변화가 있는 경우
프로그램 수행시점이 포함된다.
유연한 프로그래밍 가능하여 인터프리터 방법에 적합하다

변수의 바인딩

변수의 속성이 구체적으로 결정되는 것

프로그램 수행 중에 변수가 사용되기 위해서는 변수의 속성이 바인딩되어야 한다. 변수명, 타입, 주소, 값이 있다.

int x12;
x12 = 1 + 5 * 2;
if x12 > 10 then...

※변수명 바인딩 없이 사용되는 경우

int *p = new int;
*p = 1 + 5 * 2;
if *p > 10 then...

앞에서 차이는 *p는 포인터 변수인데 *p  안에는 11이라는 값이 저장되어 있는 주소의 주소 값이 저장되어 있다.

일반적인 변수의 속성별 바인딩 순서

  1. 변수의 바인딩 
  2. 타입의 바인딩
  3. 주소의 바인딩
  4. 값의 바인딩

변수의 바인딩 방법

명시적 선언

▶ 선언문에 명신 된 이름으로 변수명을 바인딩 ex) int x12;

묵시적 바인딩

▶선언문이 없다. 대입문 등에 처음 사용된 이름을 변수명을 바인딩 ex) k =123;

 

타입 바인딩 방법

명시적 선언

▶ 선언문에 명시된 타입으로 변수의 타입을 바인딩 ex ) int x12;

묵시적 선언

▶변수명이나 대입할 값으로부터 정해지는 타입으로 바인딩 ex) k=123; 대입을 정수로, k='a'; 대입을 문자로

▶Fortran은 변수명이 시작 알파벳에 따라 바인딩 ex) i2 =... 

정적 바인딩

▶컴파일 시점에 구문 분석을 통해 타입을 판단. 명시적 묵시적 선언 모두 가능

동적 바인딩

▶변수의 타입을 고정하지 않는다. 대입하는 값에 맞춰서 계속 변한다. ALP, SNOBOL, Python 등

 

주소 바인딩 방법

변수가 사용할 메모리가 할당되어 변수의 주소가 그 메모리의 주소로 바인딩되는 것

▶할당 : 가용한 메모리 중 필요한 만큼의 공간을 변수에 배정하는 것을 말한다.

▶해제 : 할당된 메모리를 변수로부터 회수하는 것이다.

변수의 수명

▶변수가 메모리를 할당받고 있는 기간

바인딩 방법

▶자동할당 : 선언을 통해 정해진 변수의 타입에 맞추어 필요한 메모리를 할당 / int는 4바이트, double은 8바이트

▶수동할당 : 프로그래머가 지정한 크기만큼의 메모리를 할당 / 포인터변수 malloc을 활용

주소 바인딩을 위한 메모리구조

자동할당은 상황이나 언어에 따라 정적 또는 동적 세그먼트를 활용

수동 할당은 동적 세그먼트의 힙을 활용

바인딩 시각

정적 바인딩 : 로드 시점에 정적 세그먼트의 주소를 바인딩

정적 변수 - 정적 바인딩을 하는 변수로 수명은 프로그램 수행 전체, 초기 Fortran의 모든 변수

동적 바인딩 : 프로그램 수행 중 변수가 사용되는 시점에 동적 세그먼트의 주소를 바인딩

동적 변수 - 동적 세그먼트의 사용 영역에 따라 구분(스택 동적변수, 힙 동적 변수)

▶스택 동적 변수는 스택에서 메모리를 할당받고 자동 할당을 이용하는 변수중 정적 변수가 아닌 경우, 필요시점에 자동으로 할당되고 해제된다.

▶힙 동적 변수는 동적 세그먼트 중 힙에서 메모리를 할당받는다. 수동 할당을 이용하는 변수이다. 동적 타입 바인딩을 하는 언어의 변수이다.

 

 

 

반응형