728x90

1. 변수의 개요

 

출처: 방송통신대학교

🔸변수

  • 프로그램에서 처리할 데이터를 저장/관리 할 수 있도록 메모리를 추상화한 것

 

 

 

🔸변수의 속성

배런(Barron)의 표기법

  • 변수명: 변수의 이름, 식별자(identifier)
  • 타입: 변수에 저장할 수 있는 데이터 집합의 종류, 자료형 
  • 주소: 변수가 사용하는 메모리의 위치, "참조(reference)"
  • : 변수에 저장된 데이터, 수행시간 동안 변경될 수 있음

+ 수명, 영역(scope)

 

 

 

 

 


2. 바인딩

 

출처: 방송통신대학교

🔸바인딩(binding)

  • 언어 구성 요소의 속성이 구체적으로 결정되는 것

 

 

 

🔸바인딩 시각(binding time) - 바인딩이 일어나는 시점


(바인딩 시각은 무조건 고정적이지 않음)
  • 언어 정의 시점
  • 언어 구현 시점
  • 컴파일 시점
  • 링크 시점
  • 로드 시점
  • 프로그램 수행 시점

 

 

 

🔸바인딩 시각의 구분

  1. 정적 바인딩(static binding)
    • 프로그램 수행 이전(예: 컴파일, 로드 시점)에 모두 결정되어서 프로그램 수행 시점에 바인딩의 변화가 없는 경우
    • 프로그램 수행시간의 효율성이 높음
    • 컴파일 방법에 적합
  2. 동적 바인딩(dynamic binding)
    • 프로그램 수행 시점에서 바인딩의 변화가 있는 경우
    • 실제 바인딩 시작이 프로그램 수행 시점인 경우
    • 유연한 프로그래밍이 가능
    • 인터프리터 방법에 적합

 

 

 

 

 

 


3. 변수의 바인딩

 

변수의 바인딩 예 변수명 바인딩 없이 사용되는 경우(예: 포인터)

(포인터 변수를 통해서만 값에 접근 가능)

🔸변수의 바인딩

  • 변수의 속성이 구체적으로 결정되는 것
  • 프로그램 수행 중에 변수가 사용되기 위해서는 변수의 속성이 바인딩되어야 함
    • 변수의 속성: 변수명, 타입, 주소, 값

 

 

 

🔸일반적인 변수의 속성별 바인딩 순서

①변수명 바인딩 → ②타입 바인딩 → ③주소 바인딩 → ④값 바인딩

 

 

 

①변수명 바인딩

변수명 바인딩 방법
명시적 선언(explicit declaration) 묵시적 선언(implicit declaration)
- 선언문에 명시된 이름으로 변수명을 바인딩

- 선언문 없음
- 대입문 등에 처음으로 사용된 이름으로 변수명을 바인딩

 

 

 

 

②타입 바인딩

타입 바인딩 방법
명시적 선언 묵시적 선언
- 선언문에 명시된 타입으로 변수의 타입을 바인딩 - 변수명이나 대입할 값으로부터 정해지는 타입으로 바인딩



- Fortran: 변수명의 시작 알파벳에 따라 바인딩

타입 바인딩 시각
정적 바인딩 동적 바인딩
- 컴파일 시점에 구분 분석을 통해 타입을 판단
- 명시적 선언과 묵시적 선언 모두 가능
- 변수의 타입을 고정하지 않음
- 대입할 값에 맞추어 계속 변화시킴
- 예: APL, SNOBOL 4, Python

 

 

 

③주소 바인딩

  • 변수가 사용할 메모리가 할당되어 변수의 주소가 그 메모리의 주소로 바인딩되는 것 => 변수 주소와 메모리 주소를 매칭
    • 할당(allocation): 가용한 메모리 중 필요한 만큼의 공간을 변수에 배정하는 것
    • 해제(deallocation): 할당된 메모리를 변수로부터 회수하는 것
  • 변수의 수명(lifetime/extent)
    • 변수가 메모리를 할당받고 있는 기간

※ 변수의 수명이 존재해도 무조건 해당 변수를 사용할 수 있는 것은 아님! 영역과 관련됨(8강 포스팅 확인)

 

 

 

바인딩 방법
자동 할당 수동 할당
- 선언을 통해 정해진 변수의 타입에 맞추어 필요한 메모리를 할당

- 프로그래머가 지정한 크기만큼의 메모리를 할당



- 자동 할당: 상황/언어에 따라 정적 또는 동적 세그먼트 활용
- 수동 할당: 동적 세그먼트의 힙 활용
바인딩 시각
정적 바인딩 동적 바인딩
- 로드 시점에 정적 세그먼트의 주소를 바인딩 - 프로그램 수행 중 변수가 사용되는 시점에 동적 세그먼트의 주소를 바인딩

 

 

 

  • 정적 변수(static vatiable)
    • 정적 바인딩을 하는 변수
    • 전체 프로그램 수행 시간 동안 수명 유지
    • 초기 Fortran의 모든 변수
  • 동적 변수(dynamic variable) → 동적 세그먼트의 사용 영역에 따라 구분됨
    1. 스택 동적 변수
      • 스택에서 메모리를 할당받음
      • 자동 할당을 이용하는 변수 중 정적 변수가 아닌 경우
      • 필요한 시점에 자동으로 할당/해제됨
    2. 힙 동적 변수
      • 동적 세그먼트 중에서 메모리를 할당 받음
      • 수동 할당을 이용하는 변수 (예: malloc(), free() in C)
      • 동적 타입 바인딩을 하는 언어의 변수 (예: Python)
728x90

+ Recent posts