변수의 개요
변수(variable)
- 데이터를 저장하거나 나중에 사용할 수 있도록 메모리를 추상화한 것
- 변수의 속성
- 변수명: 변수의 이름. 식별자
- 타입: 변수에 저장할 수 있는 데이터 집합의 종류
- 주소: 변수가 사용하는 메모리의 위치
- 값: 변수에 저장된 데이터. 수행시간동안 바뀔 수 있음
배런(D. W. Barron)의 표기법
하나의 변수를 표현하는 방법
바인딩(binding)
언어 구성 요소의 속성이 구체적으로 결정되는 것
바인딩 시각
- 구성 요소의 속성이 구체적으로 결정되는 것
- 언어의 구성 요소 혹은 속성에 따라 바인딩 시간은 다를 수 있음
- 언어의 정의 시점: 연산자의 의미, 수의 의미 등
- 언어의 구현 시점: 타입(int 등)의 자릿수, 수의 표기법 등
- 컴파일 시점: 변수의 타입 등
- 링크 시점: 라이브러리 함수(printf 등)의 내용 등
- 로드 시점: 변수의 주소 등
- 프로그램 수행 시점: 변수의 값 등
정적 바인딩과 동적 바인딩
- 정적 바인딩: 프로그램 수행 시점에 바인딩의 변화가 없는 경우
- 바인딩 시각이 언어의 정의 시점부터 로드 시점까지
- 프로그램 수행시간의 효율성 높음
- 컴파일 방법과 잘 어울림
- 동적 바인딩: 프로그램 수행 시점에 바인딩되거나 해지되는 경우
- 바인딩 시각이 프로그램 수행 시점
- 유연한 프로그래밍 가능
- 인터프리터 방법과 잘 어울림
변수의 바인딩
- 변수를 사용하기 위해서는 속성들(변수명, 타입, 주소, 값)이 바인딩되어야 함
- 예외적으로 변수명 바인딩 없이 사용할 수 있는 변수도 존재
- 일반적인 변수의 속성 바인딩 순서: 변수명 → 타입 → 주소 → 값
변수명 바인딩
- 명시적 선언: 선언문에 명시된 이름으로 바인딩
- 묵시적 선언: 선언문 없이 대입문 등에 처음 사용된 이름으로 바인딩
타입 바인딩
- 바인딩 방법
- 명시적 선언: 선언문에 명시한 타입으로 바인딩
- 묵시적 선언: 변수명이나 대입할 값으로부터 정해지는 타입으로 바인딩
- 바인딩 시작
- 정적 바인딩: 명시적 선언과 묵시적 선언 모두 컴파일 시점에 타임을 바인딩 할 수 있음
- 동적 바인딩: 변수의 타입을 고정하지 않고 대입할 값에 맞춰 수행 시점에 타입을 바인딩
주소 바인딩
- 변수에 메모리가 할당된 동안 메모리의 주소가 바인딩됨
- 할당: 가용한 메모리 중 필요한 만큼 배정
- 해제: 할당된 메모리를 회수
- 변수의 수명: 메모리를 할당 받고 있는 기간(주소가 바인딩된 기간)
- 바인딩 방법
- 자동 할당: 선언을 통해 정해진 타입에 필요한 메모리를 할당
- 수동 할당: 프로그래머가 지정한 크기의 메모리를 힙에서 할당
- 바인딩 시각
- 정적 바인딩: 로드 시점에 정적 세그먼트의 주소를 바인딩
- 동적 바인딩: 프로그램 수행 중 변수가 사용될 시점에 동적 세그먼트의 주소를 바인딩
- 정적 변수: 정적 바인딩을 하는 변수 (로드 시점부터 프로그램의 수행이 끝날 때까지 바인딩)
- 동적 변수: 동적 바인딩을 하는 변수
- 스택 동적 변수: 동적 세그먼트 중 스택에서 메모리를 할당
- 힙 동적 변수: 동적 세그먼트 중 힙에서 메모리를 할당
'CS' 카테고리의 다른 글
[프로그래밍 언어론] 타입 (0) | 2023.12.01 |
---|---|
[프로그래밍 언어론] 변수의 영역 (0) | 2023.12.01 |
[컴퓨터과학개론] 운영체제 (0) | 2023.11.30 |
[컴퓨터과학개론] 알고리즘 (1) | 2023.11.30 |
[프로그래밍 언어론] 프로그래밍 언어의 구현 (1) | 2023.11.30 |