본문 바로가기
Team

4월 29일 수요일 소소한 공부

by seungh2 2020. 4. 29.

"프로그래밍언어개론" 3주차 복습

지금 듣고있는 전공 과목인 "프로그래밍언어개론" 3주차 소소한 복습!

 

Binding

개체에 속성을 맺어주는 것.

 

1. 변수 Binding : 변수에 변수와 관련된 속성을 맺어주는 것.

2. 연산자 Binding : 기호에 연산의 의미를 맺어주는 것.

 

Binding Time

Binding이 이루어지는 시점은 Binding되는 속성에 따라 다르다.

Static Binding

1. 프로그래밍 언어를 설계할 때

- 연산자 Binding 기호 - 연산 = '+' - 더하기

2. 프로그래밍 언어를 구현할 때

- 정수형 값의 범위 16bit/32bit

3. 프로그램을 Compile할 때

- C의 경우 변수의 Type.

4. 프로그램을 메모리에 load할 때

- C의 경우 Static 변수, 전역변수의 주소

 

Dynamic Binding

5. 프로그램을 실행할 때

- C의 경우 Static이 아닌 지역변수의 주소

- 부 프로그램의 Parameter 주소

- 동적으로 할당된 기억장소의 주소

 

Static Binding Dynamic Binding

- 최초의 Binding이 프로그램 실행하기 전에 이루어진다.

- 한번 Binding이 이루어진 속성은 프로그램이 종료될 때까지 변하지 않는다.

- 최초의 Binding이 프로그램 실행하는 동안 이루어진다.

- 한번 Binding이 이루어진 속성이 프로그램 실행 과정에서 다시 발생하는 Binding에 의해 다른 속성으로 변할 수 있다.

 

변수의 Type Binding

Type이 지정되는 방법

- 명시적 선언 : 변수의 Type을 지정하는 선언문에 의해 Type이 지정된다.

- 묵시적 선언 : 언어 설계시 정의된 규칙에 의해 변수의 Type이 지정된다.

                    프로그램에서 변수가 처음 나타나는 지점에서 Type이 지정된다.

                    Writability 향상, Reliability 하락.

- 값의 배정 : 값의 Type에 따라 변수의 Type이 지정된다.

- Type Inference : 변수가 사용된 환경을 보고 추측. 주로 함수형 언어에서 적용된다.

 

Static Binding 

- Compiler 언어에서 Compile할 때 명시적 or 묵시적 선언 방법에 의해 Type이 지정된다.

 

Dynamic Binding

- Interpreter 언어에서 실행할 때 값의 배정방법에 의해 Type이 지정된다.

- 장점 : 유연성 향상, Generic subprogram 작성 가능

- 단점 : 프로그램 실행 비용 증가, Type 오류 발견 어려움.

 

기억장소 Binding

변수에 기억장소를 할당하는 것.

기억장소 할당 기억장소 반환

유휴 기억장소 집합으로부터 기

억장소를 할당받음

할당받아 사용하던 기억장소를

유휴 기억장소 집합에 반환함

*유휴 기억장소 : 아무도 사용하지 않는 기억장소

* 변수의 존속기간 life time : 변수에 기억장소가 할당되는 시점부터 반환되는 시점까지의 시간

 

 

변수의 존속기간에 따른 scalar변수의 category

1. Static 변수

- 프로그램 실행 전에 static area에 기억장소가 binding된다.

- binding된 기억장소는 프로그램이 종료될 때까지 유지된다.

- life time이 가장 긴 변수

- 장점

  1. 프로그램 실행 효율성이 높다. (변수에 직접 접근 가능. 기억장소 할당 및 반환 시간 필요 X)
  2. Subprogram에서 history-sensitive 변수 지원(subprogram을 호출해서 실행을 시작할 때 이전 호출에서 마지막으로 배정된 값을 갖는다.)

- 단점

  1. 유연성 부족
  2. 재귀 프로그램 작성 불가
  3. 지역변수들 사이에 기억장소를 공용 불가

2. Static Dynamic 변수

- 프로그램이 실행되는 과정에서 변수 선언문이 활성화될 때 stack area에 기억장소가 binding된다.

- Scalar 변수의 경우, 다른 속성(이름, type, scope)은 static binding되기도 한다.

- 장점

  1. 재귀 프로그램 작성 가능
  2. 지역변수들 사이에 기억장소를 공용 가능

- 단점

  1. 프로그램 실행 시간 증가. (변수에 간접 접근. 기억장소 할당 및 반환 시간 필요)
  2. Subprogram에서 history-sensitive 변수 이용 불가

3. Explicit heap-dynamic 변수

- 기억장소를 할당하는 문장을 실행할 때 heap area에 기억장소가 binding되고 반환하는 문장을 실행할 때 반환한다.

- 프로그램 실행 중 크기가 커지거나 줄어드는 경우에 사용 (Linked List, Tree)

- 장점

  1. 필요에 따라 기억공간을 효율적으로 관리하며 사용 가능

- 단점

  1. Pointer나 참조 변수를 올바르게 사용하기 어려움 -> Reliability 저하
  2. 기억장소의 dynamic 할당 및 반환에 필요한 실행시간 증가

4. Implicit heap-dynamic 변수

- 배정문을 실행할 때 기억장소가 Binding된다.

- 쓸모없어진 기억장소는 Garbage Collection을 통해 알아서 반환된다.

- 장점

  1. 유연성 향상

- 단점

  1. 기억장소의 dynamic 할당 및 반환에 필요한 실행시간 증가
  2. Compile할 때 오류 검출 불가 -> Reliability 저하

Named Constant 이름상수

- 변수 이름에 기억장소가 Binding이 이루어질 때 value binding이 동시에 이루어진다.

- 한번 binding된 값은 변경 불가.

- 장점 : Readability, Writability, Reliability 향상, Cost 절감

 

728x90

'Team' 카테고리의 다른 글

5월 4일 월요일 소소한 공부  (0) 2020.05.04
5월 1일 금요일 소소한 공부  (0) 2020.05.02
4월 28일 화요일 소소한 공부  (0) 2020.04.29
4월 27일 월요일 소소한 공부  (0) 2020.04.27
4월 24일 금요일 소소한 공부  (0) 2020.04.25

댓글