CS

[프로그래밍 언어론] 변수와 바인딩

Grace 2023. 12. 1. 09:56

변수의 개요

변수(variable)

  • 데이터를 저장하거나 나중에 사용할 수 있도록 메모리를 추상화한 것
  • 변수의 속성
    • 변수명: 변수의 이름. 식별자
    • 타입: 변수에 저장할 수 있는 데이터 집합의 종류
    • 주소: 변수가 사용하는 메모리의 위치
    • 값: 변수에 저장된 데이터. 수행시간동안 바뀔 수 있음

배런(D. W. Barron)의 표기법

하나의 변수를 표현하는 방법

바인딩(binding)

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

바인딩 시각

  • 구성 요소의 속성이 구체적으로 결정되는 것
  • 언어의 구성 요소 혹은 속성에 따라 바인딩 시간은 다를 수 있음
    • 언어의 정의 시점: 연산자의 의미, 수의 의미 등
    • 언어의 구현 시점: 타입(int 등)의 자릿수, 수의 표기법 등
    • 컴파일 시점: 변수의 타입 등
    • 링크 시점: 라이브러리 함수(printf 등)의 내용 등
    • 로드 시점: 변수의 주소 등
    • 프로그램 수행 시점: 변수의 값 등

정적 바인딩과 동적 바인딩

  • 정적 바인딩: 프로그램 수행 시점에 바인딩의 변화가 없는 경우
    • 바인딩 시각이 언어의 정의 시점부터 로드 시점까지
    • 프로그램 수행시간의 효율성 높음
    • 컴파일 방법과 잘 어울림
  • 동적 바인딩: 프로그램 수행 시점에 바인딩되거나 해지되는 경우
    • 바인딩 시각이 프로그램 수행 시점
    • 유연한 프로그래밍 가능
    • 인터프리터 방법과 잘 어울림

변수의 바인딩

  • 변수를 사용하기 위해서는 속성들(변수명, 타입, 주소, 값)이 바인딩되어야 함
  • 예외적으로 변수명 바인딩 없이 사용할 수 있는 변수도 존재
  • 일반적인 변수의 속성 바인딩 순서: 변수명 → 타입 → 주소 → 값

변수명 바인딩

  • 명시적 선언: 선언문에 명시된 이름으로 바인딩
  • 묵시적 선언: 선언문 없이 대입문 등에 처음 사용된 이름으로 바인딩

타입 바인딩

  • 바인딩 방법
    • 명시적 선언: 선언문에 명시한 타입으로 바인딩
    • 묵시적 선언: 변수명이나 대입할 값으로부터 정해지는 타입으로 바인딩
  • 바인딩 시작
    • 정적 바인딩: 명시적 선언과 묵시적 선언 모두 컴파일 시점에 타임을 바인딩 할 수 있음
    • 동적 바인딩: 변수의 타입을 고정하지 않고 대입할 값에 맞춰 수행 시점에 타입을 바인딩

주소 바인딩

  • 변수에 메모리가 할당된 동안 메모리의 주소가 바인딩됨
    • 할당: 가용한 메모리 중 필요한 만큼 배정
    • 해제: 할당된 메모리를 회수
  • 변수의 수명: 메모리를 할당 받고 있는 기간(주소가 바인딩된 기간)
  • 바인딩 방법
    • 자동 할당: 선언을 통해 정해진 타입에 필요한 메모리를 할당
    • 수동 할당: 프로그래머가 지정한 크기의 메모리를 힙에서 할당
  • 바인딩 시각
    • 정적 바인딩: 로드 시점에 정적 세그먼트의 주소를 바인딩
    • 동적 바인딩: 프로그램 수행 중 변수가 사용될 시점에 동적 세그먼트의 주소를 바인딩
  • 정적 변수: 정적 바인딩을 하는 변수 (로드 시점부터 프로그램의 수행이 끝날 때까지 바인딩)
  • 동적 변수: 동적 바인딩을 하는 변수
    • 스택 동적 변수: 동적 세그먼트 중 스택에서 메모리를 할당
    • 힙 동적 변수: 동적 세그먼트 중 힙에서 메모리를 할당