728x90
1. 변수의 개요
🔸변수
- 프로그램에서 처리할 데이터를 저장/관리 할 수 있도록 메모리를 추상화한 것
🔸변수의 속성
- 변수명: 변수의 이름, 식별자(identifier)
- 타입: 변수에 저장할 수 있는 데이터 집합의 종류, 자료형
- 주소: 변수가 사용하는 메모리의 위치, "참조(reference)"
- 값: 변수에 저장된 데이터, 수행시간 동안 변경될 수 있음
+ 수명, 영역(scope)
2. 바인딩
🔸바인딩(binding)
- 언어 구성 요소의 속성이 구체적으로 결정되는 것
🔸바인딩 시각(binding time) - 바인딩이 일어나는 시점
![]() |
![]() (바인딩 시각은 무조건 고정적이지 않음) |
- 언어 정의 시점
- 언어 구현 시점
- 컴파일 시점
- 링크 시점
- 로드 시점
- 프로그램 수행 시점
🔸바인딩 시각의 구분
- 정적 바인딩(static binding)
- 프로그램 수행 이전(예: 컴파일, 로드 시점)에 모두 결정되어서 프로그램 수행 시점에 바인딩의 변화가 없는 경우
- 프로그램 수행시간의 효율성이 높음
- 컴파일 방법에 적합
- 동적 바인딩(dynamic binding)
- 프로그램 수행 시점에서 바인딩의 변화가 있는 경우
- 실제 바인딩 시작이 프로그램 수행 시점인 경우
- 유연한 프로그래밍이 가능
- 인터프리터 방법에 적합
3. 변수의 바인딩
변수의 바인딩 예 | 변수명 바인딩 없이 사용되는 경우(예: 포인터) |
![]() |
![]() (포인터 변수를 통해서만 값에 접근 가능) |
🔸변수의 바인딩
- 변수의 속성이 구체적으로 결정되는 것
- 프로그램 수행 중에 변수가 사용되기 위해서는 변수의 속성이 바인딩되어야 함
- 변수의 속성: 변수명, 타입, 주소, 값
🔸일반적인 변수의 속성별 바인딩 순서
①변수명 바인딩 → ②타입 바인딩 → ③주소 바인딩 → ④값 바인딩 |
①변수명 바인딩
변수명 바인딩 방법 |
|
명시적 선언(explicit declaration) | 묵시적 선언(implicit declaration) |
- 선언문에 명시된 이름으로 변수명을 바인딩![]() |
- 선언문 없음 - 대입문 등에 처음으로 사용된 이름으로 변수명을 바인딩 ![]() |
②타입 바인딩
타입 바인딩 방법 | |
명시적 선언 | 묵시적 선언 |
- 선언문에 명시된 타입으로 변수의 타입을 바인딩 | - 변수명이나 대입할 값으로부터 정해지는 타입으로 바인딩![]() - Fortran: 변수명의 시작 알파벳에 따라 바인딩 ![]() |
타입 바인딩 시각 | |
정적 바인딩 | 동적 바인딩 |
- 컴파일 시점에 구분 분석을 통해 타입을 판단 - 명시적 선언과 묵시적 선언 모두 가능 |
- 변수의 타입을 고정하지 않음 - 대입할 값에 맞추어 계속 변화시킴 - 예: APL, SNOBOL 4, Python 등 |
③주소 바인딩
- 변수가 사용할 메모리가 할당되어 변수의 주소가 그 메모리의 주소로 바인딩되는 것 => 변수 주소와 메모리 주소를 매칭
- 할당(allocation): 가용한 메모리 중 필요한 만큼의 공간을 변수에 배정하는 것
- 해제(deallocation): 할당된 메모리를 변수로부터 회수하는 것
- 변수의 수명(lifetime/extent)
- 변수가 메모리를 할당받고 있는 기간
※ 변수의 수명이 존재해도 무조건 해당 변수를 사용할 수 있는 것은 아님! 영역과 관련됨(8강 포스팅 확인)
바인딩 방법 | |
자동 할당 | 수동 할당 |
- 선언을 통해 정해진 변수의 타입에 맞추어 필요한 메모리를 할당![]() |
- 프로그래머가 지정한 크기만큼의 메모리를 할당![]() |
![]() - 자동 할당: 상황/언어에 따라 정적 또는 동적 세그먼트 활용 - 수동 할당: 동적 세그먼트의 힙 활용 |
|
바인딩 시각 | |
정적 바인딩 | 동적 바인딩 |
- 로드 시점에 정적 세그먼트의 주소를 바인딩 | - 프로그램 수행 중 변수가 사용되는 시점에 동적 세그먼트의 주소를 바인딩 |
- 정적 변수(static vatiable)
- 정적 바인딩을 하는 변수
- 전체 프로그램 수행 시간 동안 수명 유지
- 초기 Fortran의 모든 변수
- 동적 변수(dynamic variable) → 동적 세그먼트의 사용 영역에 따라 구분됨
- 스택 동적 변수
- 스택에서 메모리를 할당받음
- 자동 할당을 이용하는 변수 중 정적 변수가 아닌 경우
- 필요한 시점에 자동으로 할당/해제됨
- 힙 동적 변수
- 동적 세그먼트 중 힙에서 메모리를 할당 받음
- 수동 할당을 이용하는 변수 (예: malloc(), free() in C)
- 동적 타입 바인딩을 하는 언어의 변수 (예: Python)
- 스택 동적 변수
728x90
'KNOU > 프로그래밍언어론' 카테고리의 다른 글
[프로그래밍언어론] 9. 타입 (0) | 2022.11.01 |
---|---|
[프로그래밍언어론] 8. 변수의 영역 (0) | 2022.10.10 |
[프로그래밍언어론] 6. 프로그래밍 언어의 구현 (1) | 2022.09.26 |
[프로그래밍 언어론] 5. 구문 분석 (1) | 2022.09.20 |
[프로그래밍 언어론] 4. 구문론과 의미론 (0) | 2022.09.05 |