📌 개요
🔑 학습 키워드
┗ 변수 정의 및 속성(변수명, 주소, 값, 타입)
┗ 변수 -> 배런 표기법
┗ 바인딩 정의
┗ 바인딩 시각 -> 동적 바인딩, 정적 바인딩
┗ 변수의 수명 -> 할당, 해제 -> 자동 할당, 수동 할당
┗ 정적 세그먼트, 동적 세그먼트
┗ 변수 종류: 정적 변수, 동적 변수(스택 동적 변수), 힙 동적 변수
💡 1. 변수의 개요
[ 변수 ]
┗ 데이터를 저장하거나 나중에 사용할 수 있도록 기억하는 객체
┗ 컴퓨터 하드웨어의 메모리를 추상화한 것
┗ 변수의 속성: 변수명, 타입, 주소, 값
- '변수명': 변수의 이름 -> 식별자
- '타입': 변수에 저장할 수 있는 데이터 집합의 종류
- '주소': 변수가 사용하는 메모리의 위치
- '값': 변수에 저장된 데이터 -> 수행 시간 동안 바뀔 수 있음
┗ 배런의 표기법: 하나의 변수를 표현하는 방법임.

💡 2. 바인딩
[ 바인딩 ]
┗ 언어 구성 요소의 '속성'이 '구체적으로 결정'되는 것
[ 바인딩 시각 ]
┗ '구성 요소'와 '속성' 사이의 바인딩이 일어나는 시점
┗ 언어의 구성 요소 혹은 속성에 따라 바인딩 시각은 다를 수 있음.
- '언어의 정의 시점': 연산자의 의미, 수의 의미 등
- '언어의 구현 시점': 타입(int 등)의 자릿수, 수의 표기법 등
- '컴파일 시점': 변수의 타입 등
- '링크 시점': 라이브러리 함수(printf 등)의 내용 등
- '로드 시점': 변수의 주소 등
- '프로그램 수행 시점': 변수의 값 등
[ "정적 바인딩" , "동적 바인딩" ]
┗ 정적 바인딩: 프로그램 수행 시점에 바인딩의 변화가 없는 경우
- '바인딩 시각'이 '언어의 정의 시점'부터 '로드 시점'까지를 나타냄.
- 프로그램 수행 시간의 효율성 높음 -> 미리 컴파일을 해두어 정적이라 효율성 업.
- '컴파일' 방법에 적합
┗ 동적 바인딩: 프로그램 수행 시점에 바인딩되거나 해지되는 경우
- '바인딩 시각'이 '프로그램 수행 시점'
- 유연한 프로그래밍 가능
- '인터프리터' 방법에 적합
💡 3. 변수의 바인딩
[ 변수의 바인딩 ]
┗ 변수의 속성이 구체적으로 결정되는 것
┗ 프로그램 수행 중에 변수가 사용되기 위해서는 변수의 속성이 바인딩되어야 함
- '변수의 속성': 변수명, 탕입, 주소, 값
┗ 예외적으로 변수명 바인딩 없이 사용할 수 있는 변수도 존재
┗ 일반적인 변수의 속성 바인딩 순서:
'변수명' 바인딩 -> '타입' 바인딩 -> '주소' 바인딩 -> '값' 바인딩
[ 변수명 바인딩 ]
┗ 바인딩 방법: "명시적 선언", "묵시적 선언" -> 2가지 존재
- '명시적 선언': 선언문에 명시된 이름으로 변수명 바인딩
-> ex) int a = 1;
- '묵시적 선언': 선언문 없이 대입문 등에 처음 사용된 이름으로 변수명 바인딩
-> ex) x = 10; // 선언 없이 사용
[ 타입 바인딩 ]
┗ 바인딩 방법: "명시적 선언", "묵시적 선언"
- '명시적 선언': 선언문에 명시한 타입으로 변수의 타입을 바인딩
- '묵시적 선언': 변수명이나 대입할 값으로부터 정해지는 타입으로 변수의 타입 바인딩
-> ex) Fortran: 변수명이 i~n으로 시작하는 변수는 정수형으로 바인딩 하는 예 존재
┗ 바인딩 시각: "정적 바인딩", "동적 바인딩"
- '정적 바인딩': 명시적 선언과 묵시적 선언 모두 컴파일 시점에 구문 분석을 통해 타입 판단 가능
- '동적 바인딩': 변수의 타입을 고정하지 않고 대입할 값에 맞춰 수행 시점에 타입 계속 변환
-> ex) Python, APL, SNOBOL 4 등 -> 동적 바인딩 지원
[ 주소 바인딩 ]
┗ 변수가 사용할 메모리가 할당되어 변수의 주소가 그 메모리의 주소로 바인딩되는 것
- '할당': 가용한 메모리 중 필요한 만큼의 공간을 변수에 배정
- '해제': 할당된 메모리를 변수로부터 회수
┗ 변수의 수명: 변수가 메모리를 할당받고 있는 기간
- 변수의 주소가 바인딩된 기간과 동일함.
┗ 바인딩 방법: 자동 할당, 수동 할당
- '자동 할당': 선언을 통해 정해진 변수의 타입에 맞추어 필요한 메모리를 할당
-> 상황/언어에 따라 정적 세그먼트 또는 동적 세그먼트 활용
- '수동 할당': 프로그래머가 '지정한 크기'만큼의 '메모리'를 할당
-> 동적 세그먼트의 힙 활용
┗ 바인딩 시각: 정적 바인딩, 동적 바인딩
- '정적 바인딩': '로드 시점'에 정적 세그먼트의 주소를 바인딩
-> ex) 초기 Fortran 이 대표적
- '동적 바인딩': 프로그램 수행 중 변수가 사용되는 시점에 동적 세그먼트의 주소를 바인딩
┗ 정적 변수: 정적 주소 바인딩을 하는 변수
- 프로그램 실행 전 메모리 주소 결정 -> 프로그램 끝날 때까지 동일한 메모리 공간 사용하는 변수
- '변수의 수명': 프로그램 수행 전체
-> 즉, 자바 static 과 같이 프로그램 끝날 때 해제됨.
┗ 동적 변수: 동적 주소 바인딩을 하는 변수
- 프로그램 실행 중에 필요한 시점에 메모리 주소가 결정되는 변수
- '스택 동적 변수': 동적 세그먼트 중 스택에서 메모리를 할당
- 자동 할당을 이용하는 변수 중 정적 변수가 아닌 경우
- 필요한 시점에 자동으로 할당/해제
- ex) 지역변수
┗ 힙 동적 변수: 동적 세그먼트 중 힙에서 메모리를 할당
[ '수동 할당을 이용하는 변수' ]
- 프로그래머가 지정한 시점(malloc, new 등)에 할당
- 프로그래머가 지정한 시점(free, delete 등)에 해제
- 동적으로 타입 바인딩을 하는 언어의 변수'방송통신대학교 > 📝프로그래밍 언어론' 카테고리의 다른 글
| [프로그래밍 언어론] 6강 - 프로그래밍 언어의 구현 (0) | 2026.09.02 |
|---|---|
| [프로그래밍 언어론] 5강 - 구문 분석 (0) | 2026.09.02 |
| [프로그래밍 언어론] 4강 - 구문론과 의미론 (0) | 2026.08.30 |
| [프로그래밍 언어론] 3강 - 프로그래밍 언어 패러다임 (0) | 2026.08.29 |
| [프로그래밍 언어론] 2강 - 프로그래밍 언어의 발전 및 동작 원리 (0) | 2026.08.21 |
