티스토리 뷰

SoftWare/기타

Binding의 개념

White Whale 2016. 3. 15. 02:00
728x90

 

1. Binding의 개념

  프로그래밍에서 어떤 대상물의 이름을 그것이 나타내는 실제의 대상물과 연결하는 것. 즉 식별자가 그 대상인 메모리 주소, 데이터형 또는 실제값으로 배정되는 것이다. 예로는 변수와 데이터, 변수와 메모리주소, 그리고 함수와 기호가 있다.  
 

2. Binding을 하는 시기

  1. Language design time : 함수와 기호를 바인딩한다.
  2. Language implementation time : 부동소수점에 대한 표현 범위를 바인딩한다.
  3. Compile time : 변수와 변수 타입을 연결한다.

  4. Load time : 변수(이름)와 메모리상 실질적 데이터(address or value)를 연결시킨다. 변수의 예로는 전역를 들수있다.

  5. Run time : 전역 변수가 아닌 모든 변수들을 메모리상 실질적 데이터(address or value)를 연결시킨다. 
 

위 바인딩 시기 중 3번 Compile time을 기준으로 이전은 프로그램이 실행하기전이고 이후는 프로그램이 실행상태이다. 3번에서 변수에 대한 변수타입을 바인딩하는데 여기서 변수 타입에 따라 메모리 크기가 결정된다. 3번 이후로는 프로그램이 실행되었을 때이며 실질적으로 메모리상에 올라가는 4번 로드타임에서 변수와 메모리가 바인딩된다. 그리고 5번에서는 전역 변수가 아닌 지역 변수라 하였는데 여기서 모든 변수에는 동적 할당되는 변수 뿐만 아니라 일반 적인 지역 변수들 역시 Run time 때 즉 선언이 진행될 때 바인딩된다.

추가적으로 Run time시작을 기준으로 이전에(Load time) 한 변수와의 Binding은 고정적(static)이고 이후에 한 변수와의 Binding은 유동적(Dynamic)하다. 여기서 고정적이다 유동적이다라는 말의 주체는 메모리 위치 및 크기를 말한다.

 

3. Static(Dynamic) Type Binding

  A Binding is Static(Dynamic)와 Static(Dynamic) Type Binding은 다른 뜻을 가진다. 전자는 변수와 메모리상의 실체의 연결에 대한 속성이다. 즉 변수와 메모리의 연결이 정적인지 동적인지이다. 후자는 바인딩할 피사체인 변수의 타입이 고정인지 유동인지를 나타낸다.

  1. Static Type Binding : Static type Binding은 명시적 선언(explicit declaration)으로 되어있는 변수와의 바인딩과 묵시적 선언(implicit declaration)으로 되어있는 변수와의 바인딩으로 나뉘어 진다. 명시적 선언을 하는 대표적인 언어로는 C가 있고 정수를 담기 위해서는 정수 자료형인 int를 명확시 선언한다. 반면 묵시적 선언의 대표적인 언어인 FORTRAN에서는 I에서 S사이의 알파벳만으로 정수 자료형을 선언할 수 있다.

  2. Dynamic Type Binding : Dynamic Type Binding을 하는 대표적인 언어로는 JavaScript가 있다. JavaScript의 자료형은 var로 통일 되어 있어 Type Binding시 데이터를 보고 해당 데이터의 타입을 추론(Type Inferencing)한다. 이러한 언어들은 자료형이 통일되어 있어 사용하기는 쉬우나 Type Binding시 타입 추론(Type Inferencing)으로 인한 높은 비용을 치루고 컴파일 중에 타입 에러를 찾지못한다.

Type Binding은 Compile time에 이루어 진다.

 

 

4. Categories of variables by lifetimes

  1. Static 변수 : 프로그램 실행전에 메모리의 스텍의 기억장소(address)가 바인딩되고 프로그램이 종료될때까지 유지된다. 쉽게 말하면 전역 변수가 Static변수이다. 다이렉트 어드레싱이 가능하고, 할당, 반환시간이 없어 프로그램 효율성이 좋지만, 유연성이 떨어지고 리컬시브 프로그래밍을 할 수 없다. 또한 지역변수들 사이에 기억장소를 공용할 수 없다.
주의)상수랑 전역변수는 다르다. 상수는 text영역에 저장되고 전역변수는 스텍에 저장된다.

  2. Stack-Dynamic 변수 : 프로그램이 실행되는 과정에서 변수의 선언문이 활성화 될 때 메모리의 스텍의 기억장소(address)가 바인딩된다. 함수 안의 동적할당으로 생성되지 않은 지역변수이다. 리컬시브 프로그래밍이 가능하고 지역변수간의 기억장소를 공용할수있다. 하지만 할당과 반환이 필료하며 여기에서 오버헤드가 발생한다. 그리고 서브프로그램은 상위 프로그램의 지역 변수(history sensitive)를 사용하지 못한다. 그리고 함수 내 변수가 콜 바이 레퍼런스로 받아 온 변수를 참조할 때 비효율적 참조(Inefficient references)가 된다.

  3. Explicit Heap-Dynamic 변수 : 기억장소를 할당하는 문장(malloc)이 실행될 때 힙영역에 기억장소가 바인딩되고 반환 하는 문장을 실행할 때 반환된다. 링크드리스트나 트리같은 프로그램 실행중 크기가 변화하는 경우에 사용된다. 필요에 따라 기억공간을 효율적으로 관리할 수 있다. 하지만 포인터나 참조변수를 올바르게 사용하기 어려워 신뢰성이 떨어지고, 할당 반환의 시간이 필요해 실행 시간이 증가 한다.

  4. Implicit Heap-Dynamic 변수 : 묵시적 선언(implicit declaration)을 하는 언어에서 선언문을 실행할 때 기억장소가 바인딩되고 반환된다. 대표적인 예로 JavaScript의 String과 Array를 들 수 있다. 쉽게 사용하지만 모든 데이터가 동적으로 잡혀 비효율적이고 컴파일시 오류를 검출할수없어 신뢰성이 저하된다. 추가적으로 JavaScript는 쓸모 없어진 메모리는 시스템에서 쓰레기 수집을 통해 반환된다.

 

5. Type Checking

  1. Type Checking은 피연산자와 연산자의 타입 호환성을 확인하는 것이다.
  2. 호환되는 타입은  Language Rule에 정의되어 있다. 만약 호환되는 다른 타입이 연산될 시 한쪽 타입을 다른 한쪽 타입으로 변경시킨다.
  3. Type Error는 피연산자와 연산자가 타입 호환이 되지 않았을 때 발생한다.
  4. Type Binding이 Static인지 Dynamic인지에 따라 Type Checking도 정적으로 하거나 동적으로 한다.
  5. 만약 프로그래밍 언어가 Static Type Binding을 한다면(strongly typed) 에러는 컴파일 시 발견된다.

 

6. Type Compatibility

  1. 같은 자료형으로 선언한 두개의 변수는 호환성있다고 하는데 이를 Name type compatibility라고 한다.
  2. 세부 자료형은 기본 자료형과 호환되지 않는다(unsigned integer과 integer)
  3. 동일한 구조의 Structure나 class는 호환이 된다.

 

'SoftWare > 기타' 카테고리의 다른 글

표준화의 예  (0) 2016.04.13
C언어 type에 대한 subtype  (0) 2016.04.13
[컴파일러]컴파일 과정  (0) 2016.04.01
Programming Language - 용어 정리 1  (0) 2016.03.21
Names과 Variables  (0) 2016.03.14
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함