기본 콘텐츠로 건너뛰기

방송대 프로그래밍언어론 7강: 변수 속성과 바인딩 시각

0-썸네일-요약노트-프로그래밍언어론-7강

방송대 프로그래밍언어론 7강: 변수 속성과 바인딩 시각

int level;을 선언한 뒤 값을 3에서 4로 바꾸면 무엇이 달라질까? 값은 달라지지만 이름·타입·주소까지 함께 바뀌는 것은 아니다. 변수에 묶이는 속성을 하나씩 분리하고, 언제 묶이며 실행 중 바뀔 수 있는지를 사례별로 판정하면 정적·동적 바인딩과 변수의 수명을 정확히 구분할 수 있다.

한 변수에는 서로 다른 바인딩이 겹쳐 있다

변수는 데이터를 저장하는 기억장소를 추상화한 것으로, 기억장소를 가리키는 상대적인 이름이라고 볼 수 있다. 그러나 변수 하나를 이름 하나로만 이해하면 실행 과정에서 무엇이 바뀌었는지 판정하기 어렵다. 강의는 변수의 속성을 이름, 타입, 주소, 값, 수명, 영역으로 나눈다.

int level;
level = 3;
level = 4;

이 사례에서 level이라는 이름과 int 타입은 선언을 처리할 때 정해진다. 실행을 위해 기억장소가 확보되면 주소가 연결되고, 대입문이 실행될 때 값은 3, 다시 4로 바뀐다. 값의 변경만 보고 타입이나 주소도 바뀌었다고 결론 내리면 속성별 바인딩을 섞은 것이다.

바인딩 판정 카드: ① 어떤 속성을 묻는가, ② 언제 구체적으로 정해지는가, ③ 실행 중 다시 바뀔 수 있는가, ④ 기억장소는 어떻게 확보되고 해제되는가를 차례로 확인한다.

배런 표기법은 이름·타입·주소·값의 연결을 보여 준다

강의의 배런 표기법은 변수를 하나의 상자가 아니라 여러 속성의 연결로 나타낸다. 이름은 타입에, 타입은 주소에 연결되고, 주소가 가리키는 기억장소 안에 값이 놓인다. 강의 예시를 문자로 옮기면 다음과 같다.

이름 x12 → 타입 int → 주소 FF00 → 기억장소의 값 11
속성답하는 질문변화 사례
이름프로그램에서 무엇이라고 부르는가?선언 또는 첫 사용에서 식별자와 연결
타입어떤 값과 연산을 허용하는가?정적으로 고정되거나 실행 중 값에 따라 변경
주소어느 기억장소를 사용하는가?할당 때 연결되고 해제 때 끊어짐
현재 저장된 데이터는 무엇인가?대입이 실행될 때 반복해서 변경 가능
수명주소와 연결된 기간은 언제까지인가?할당부터 해제까지
영역프로그램의 어느 범위에서 이름을 사용할 수 있는가?구체적인 규칙은 다음 강의에서 다룸

이 연결에서 기억장소의 값만 바뀔 수도 있고, 동적 타입 언어처럼 타입 연결까지 바뀔 수도 있다. 그러므로 “변수가 바뀐다”는 표현은 어느 화살표 또는 상자 안의 내용이 바뀌는지까지 밝혀야 정확하다.

바인딩 시각은 언어 정의부터 실행까지 이어진다

바인딩은 언어 구성요소의 속성이 구체적으로 정해지는 것이다. 모든 바인딩이 컴파일 때 일어나는 것은 아니다. 언어를 정의할 때 정해지는 것부터 프로그램 실행 중 결정되는 것까지 시각이 다르다.

바인딩 시각대표적으로 정해지는 속성판정 예
언어 정의 시연산자와 수의 의미+가 어떤 연산을 나타내는가?
언어 구현 시타입의 자릿수·크기, 수의 표현int를 몇 바이트로 구현하는가?
컴파일 시변수의 타입선언된 변수에 어떤 타입을 연결하는가?
링크 시라이브러리 함수의 내용호출한 외부 함수의 코드를 무엇과 연결하는가?
로드 시변수의 주소프로그램을 메모리에 올릴 때 어느 주소를 배정하는가?
실행 시변수의 값대입문을 수행한 뒤 현재 값은 무엇인가?

앞의 level 사례에서 이름과 타입은 컴파일 과정에서, 주소는 실행 준비 또는 실행 과정의 할당에서, 값은 대입문 실행 때 연결될 수 있다. 정확한 시각은 언어와 변수 종류에 따라 달라지므로 “어떤 속성의 바인딩인가”를 먼저 밝혀야 한다.

정적과 동적은 실행 중 바인딩의 변화 여부로 판정한다

이 강의에서 정적 바인딩은 프로그램 실행 중 바인딩이 변하지 않는 경우다. 언어 정의·구현, 컴파일, 링크, 로드 시 이루어진 바인딩이 여기에 포함된다. 실행 전에 필요한 관계가 정해져 있어 실행 효율을 높이기 좋고 컴파일 방식에 적합하다.

동적 바인딩은 프로그램 실행 중에 속성이 묶이거나 기존 바인딩이 바뀌는 경우다. 실제 바인딩 시각은 실행 시이며, 상황에 따라 관계를 바꿀 수 있어 유연하고 인터프리터 방식에 적합하다.

사례실행 중 변화판정
로드할 때 정해진 전역 변수 주소가 종료까지 유지됨주소 바인딩이 변하지 않음정적 주소 바인딩
대입문마다 변수 값이 달라짐값 바인딩이 바뀜동적 값 바인딩
실행 중 할당된 지역 변수의 주소가 호출마다 달라짐주소가 실행 때 묶임동적 주소 바인딩
한 이름의 타입이 대입 값에 따라 정수에서 문자열로 달라짐타입 바인딩이 바뀜동적 타입 바인딩

주의: 정적 바인딩을 무조건 컴파일 시 바인딩으로 좁히면 로드 시 결정되어 실행 내내 유지되는 주소를 놓친다. 판정 기준은 실행 중 해당 바인딩이 변하는가이다.

이름과 타입은 바인딩 방법과 시각을 따로 본다

변수 이름은 선언문으로 명시적으로 묶을 수도 있고, 이름을 처음 사용하는 순간 묵시적으로 묶을 수도 있다. 타입도 선언으로 직접 지정하는 명시적 타입 바인딩과 변수 이름 또는 대입되는 값으로 추론하는 묵시적 타입 바인딩이 있다.

그러나 명시적·묵시적은 어떻게 정하는가의 구분이고, 정적·동적은 언제 정해지고 실행 중 바뀌는가의 구분이다. 두 축을 같은 뜻으로 취급하면 안 된다.

사례방법시각·변화최종 판정
int count;선언으로 타입을 직접 지정컴파일 때 정해져 실행 중 유지명시적·정적 타입 바인딩
Fortran에서 i~n으로 시작하는 이름을 정수로 간주이름 규칙으로 타입 추론컴파일 때 정해져 실행 중 유지묵시적·정적 타입 바인딩
Python에서 대입 값에 따라 타입이 결정됨대입 값으로 타입 결정실행 중 타입이 달라질 수 있음묵시적·동적 타입 바인딩
item = 123      # 현재는 정수 타입과 연결
item = "abc"    # 이후 문자열 타입과 연결

두 대입 사이에서 이름 item은 같지만 타입과 값의 바인딩이 달라진다. 반대로 묵시적으로 타입을 알아내더라도 컴파일 후 타입이 고정된다면 동적 타입 바인딩이라고 할 수 없다.

주소 바인딩 기간이 변수의 수명이다

변수에 기억장소를 연결하는 일을 할당, 연결을 끊고 기억장소를 회수하는 일을 해제라고 한다. 변수의 수명은 주소가 바인딩된 기간, 즉 할당된 때부터 해제될 때까지다.

  1. 변수에 필요한 크기와 할당 방법을 정한다.
  2. 기억장소가 확보되며 주소가 변수에 바인딩된다.
  3. 수명 동안 그 주소를 통해 값을 읽고 쓴다.
  4. 해제되면 주소 바인딩이 끝나고 그 변수의 수명도 끝난다.

수명과 영역은 같은 개념이 아니다. 수명은 실행 중 기억장소가 존재하는 시간의 문제이고, 영역은 이름을 사용할 수 있는 프로그램의 범위 문제다. 이번 강의는 수명을 주소 바인딩으로 설명하며, 영역의 구체적인 규칙은 다음 강의로 이어진다.

판별 문장: “언제부터 언제까지 기억장소가 있는가?”라면 수명, “어느 코드에서 그 이름을 쓸 수 있는가?”라면 영역을 묻는다.

할당 주체·메모리 영역·바인딩 시각은 서로 다른 축이다

자동 할당은 선언되거나 추론된 타입에 따라 구현 시스템이 필요한 기억장소를 확보하는 방식이다. 상황과 언어에 따라 정적 세그먼트 또는 동적 세그먼트를 사용할 수 있다. 수동 할당은 프로그래머가 크기와 시점을 지정하며, 힙에 기억장소를 확보한다.

구분 축선택지묻는 핵심
할당 주체자동 / 수동시스템이 관리하는가, 프로그래머가 요청·해제하는가?
메모리 영역정적 세그먼트 / 스택 / 힙실제 기억장소가 어디에 놓이는가?
주소 바인딩 시각로드 시 / 실행 시주소가 언제 변수와 연결되는가?
수명 종료프로그램 종료 / 블록·호출 종료 / 명시적 해제 등주소 연결이 언제 끊기는가?

따라서 “자동 할당이므로 모두 정적 변수다”라는 추론은 틀리다. 자동 할당된 지역 변수가 함수 호출 때 스택에 생겼다가 반환 때 사라진다면 주소는 실행 중 동적으로 바인딩된다. 반대로 정적 세그먼트에 놓인 변수의 주소는 로드 때 정해져 종료까지 유지될 수 있다.

정적·스택 동적·힙 동적 변수는 수명 관리가 다르다

변수 종류저장 위치주소 바인딩과 해제대표 특징
정적 변수정적 세그먼트로드 때 바인딩, 프로그램 종료 때까지 유지프로그램 실행 전체가 수명
스택 동적 변수스택필요할 때 자동 할당, 호출·블록 종료에 맞춰 자동 해제실행 중 주소가 묶이며 재귀 호출마다 별도 기억장소 가능
힙 동적 변수 실행 중 힙에 메모리를 할당받음수동 할당 변수나 동적 타입 바인딩 언어의 변수가 대표적
double *data = new double[4];
data[0] = 1.5;
delete[] data;

new을 실행하면 실수 네 개를 저장할 공간이 힙에 할당되고 그 시작 주소를 통해 원소를 사용한다. delete[]을 실행하면 그 힙 공간의 수명이 끝난다. 포인터 변수 data 자체의 기억장소와 data가 가리키는 힙 배열의 기억장소는 서로 다르므로 두 수명도 따로 추적해야 한다.

경계 사례: 힙에 할당된 객체는 직접적인 변수 이름이 없어도 포인터를 통해 사용할 수 있다. 이때 이름이 없는 것은 힙 객체의 기억장소이며, 그 주소를 저장하는 포인터 변수까지 이름이 없는 것은 아니다.

사례 판단은 속성에서 시작해 수명으로 끝낸다

낯선 코드에서도 다음 순서를 적용하면 비슷해 보이는 분류를 분리할 수 있다.

  1. 대상 속성 표시: 이름·타입·주소·값 중 무엇이 정해지거나 바뀌는지 표시한다.
  2. 결정 시각 확인: 정의, 구현, 컴파일, 링크, 로드, 실행 중 어느 시각인지 찾는다.
  3. 정적·동적 판정: 실행 중 해당 바인딩이 새로 생기거나 바뀌는지 확인한다.
  4. 방법 분리: 명시적·묵시적 타입 결정과 자동·수동 할당을 시각 분류와 섞지 않는다.
  5. 주소와 수명 추적: 기억장소가 어디에 할당되고 언제 해제되는지 끝까지 확인한다.

예를 들어 함수 호출 때 자동으로 생기는 지역 정수는 타입이 컴파일 때 정적으로 묶이면서 주소는 실행 때 스택에 동적으로 묶일 수 있다. 하나의 변수에 “정적”과 “동적”이라는 설명이 함께 붙는 이유는 모순이 아니라 서로 다른 속성을 말하기 때문이다.

최종 점검: “이 변수는 동적이다”라고만 쓰지 말고 “타입 바인딩은 정적이지만 주소 바인딩은 실행 시 동적이다”처럼 속성을 붙여 답한다.

핵심 개념 정리

  • 변수는 이름·타입·주소·값·수명·영역이라는 여러 속성의 묶음이다.
  • 바인딩은 속성이 구체적으로 정해지는 것이며 언어 정의부터 실행까지 서로 다른 시각에 일어난다.
  • 정적·동적 바인딩은 실행 중 변화 여부로 구분하고, 명시적·묵시적 바인딩은 결정 방법으로 구분한다.
  • 주소 바인딩은 할당으로 시작해 해제로 끝나며, 이 기간이 변수의 수명이다.
  • 자동·수동 할당, 정적·스택·힙 저장 위치, 정적·동적 주소 바인딩은 각각 다른 판단 축이다.

변수 문제의 핵심은 하나의 이름 아래 겹쳐 있는 바인딩을 분해하는 데 있다. 먼저 어떤 속성을 묻는지 정하고, 그 속성이 언제 결정되며 실행 중 변하는지를 본다. 주소 문제라면 할당 위치와 해제 시점까지 추적한다. 이 순서를 지키면 값 변경을 타입 변경으로 오해하거나, 묵시적 타입 결정을 곧바로 동적 바인딩으로 판단하는 오류를 피할 수 있다.

예상문제 10선

1. 바인딩의 의미를 가장 정확하게 설명한 것은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ③

  • ① 오답: 힙 배치는 주소 바인딩의 한 사례일 뿐 모든 바인딩의 뜻이 아니다.
  • ② 오답: 이름 외에도 타입·주소·값 등 여러 속성이 바인딩 대상이다.
  • ③ 정답: 바인딩은 이름, 타입, 주소, 값 같은 속성을 구체적으로 연결하는 것이다.
  • ④ 오답: 초기화는 값 바인딩의 한 경우이며 정의 전체가 아니다.

2. 정적 바인딩과 동적 바인딩을 구분하는 기준으로 옳은 것은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ①

  • ① 정답: 강의의 구분 기준은 실행 중 바인딩의 변화 여부다.
  • ② 오답: 식별자 표기 방식은 정적·동적 판정 기준이 아니다.
  • ③ 오답: 값의 부호는 값 내용일 뿐 바인딩 시각을 알려 주지 않는다.
  • ④ 오답: 문장 구문과 속성의 바인딩 시각은 별개의 문제다.

3. 변수의 주소와 수명을 추적하는 순서로 가장 적절한 것은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ④

  • ① 오답: 해제한 뒤 같은 수명이 시작되는 것이 아니라 할당이 먼저다.
  • ② 오답: 값 변경 여부와 무관하게 수명은 주소 할당에서 시작한다.
  • ③ 오답: 영역은 이름의 사용 범위이며 주소 수명의 시간 순서를 대신하지 않는다.
  • ④ 정답: 할당으로 주소가 묶이고 해제로 연결이 끝날 때 수명도 끝난다.

4. int score; score=10; score=20;에서 두 대입문 사이에 반드시 달라진 속성은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ②

  • ① 오답: 두 문장 모두 같은 이름 score를 사용한다.
  • ② 정답: 첫 대입 후 10, 둘째 대입 후 20으로 값 바인딩이 달라진다.
  • ③ 오답: int 타입은 두 대입 사이에 그대로 유지된다.
  • ④ 오답: 대입 값 변경만으로 이름의 사용 범위가 바뀌지 않는다.

5. “묵시적 타입 바인딩은 언제나 동적 타입 바인딩이다”라는 주장에 대한 판단은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ②

  • ① 오답: 묵시적은 결정 방법이며 실행 중 변경을 뜻하지 않는다.
  • ② 정답: Fortran의 이름 규칙처럼 묵시적으로 추론하면서 정적으로 고정하는 사례가 있다.
  • ③ 오답: 타입 결정 방법과 기억장소의 저장 위치는 별개의 축이다.
  • ④ 오답: 변수 타입도 이름·주소·값과 함께 중요한 바인딩 대상이다.

6. 스택 동적 변수와 힙 동적 변수를 옳게 비교한 것은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ④

  • ① 오답: 두 종류 모두 실행 중 동적 세그먼트에서 주소가 연결되는 경우다.
  • ② 오답: 스택 변수의 할당과 해제는 호출·블록 구조에 맞춰 자동 관리된다.
  • ③ 오답: 힙 동적 변수의 기억장소는 정적 세그먼트가 아니라 힙에 놓인다.
  • ④ 정답: 강의는 자동 관리되는 스택 동적 변수와 수동 관리되는 힙 동적 변수를 구분한다.

7. Python에서 k=123 다음에 k='abc'가 실행된 경우의 설명으로 옳은 것은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ①

  • ① 정답: 대입 값에 따라 k의 값과 타입이 실행 중 정수에서 문자열로 달라진다.
  • ② 오답: 식별자 이름은 계속 k다.
  • ③ 오답: 이 사례의 값과 타입 결정은 각 대입문이 실행될 때 일어난다.
  • ④ 오답: 강의가 제시한 동적 타입 바인딩의 대표 사례다.

8. 함수 f를 재귀적으로 세 번 호출하여 각 호출의 지역 변수 n이 스택에 따로 할당되었다. 동시에 살아 있는 n의 기억장소 수는?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ③

  • ① 오답: 세 호출이 아직 반환되지 않았다면 각 지역 변수의 수명이 진행 중이다.
  • ② 오답: 이름은 같아도 재귀 호출별 스택 프레임에 별도 기억장소가 생긴다.
  • ③ 정답: 동시에 활성화된 호출이 세 개이므로 n의 기억장소도 세 개다.
  • ④ 오답: 문제에서 호출별로 하나씩 따로 할당된다는 조건을 주었다.

9. 변수의 수명을 가장 정확하게 정의한 것은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ④

  • ① 오답: 이는 이름의 사용 범위를 나타내는 영역에 대한 설명이다.
  • ② 오답: 선언 작성 시간은 실행 중 변수 수명과 관계없다.
  • ③ 오답: 값의 부호가 바뀌어도 같은 기억장소의 수명은 계속될 수 있다.
  • ④ 정답: 할당으로 주소가 연결된 때부터 해제로 끊어질 때까지가 수명이다.

10. “함수 호출 때 자동으로 스택에 생기는 지역 정수 변수”를 가장 정확하게 설명한 것은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ③

  • ① 오답: 자동 할당된 스택 주소는 함수가 호출되는 실행 시점에 정해질 수 있다.
  • ② 오답: 저장 위치가 스택이라는 사실만으로 타입이 동적으로 바뀌지는 않는다.
  • ③ 정답: 한 변수에서도 속성별 바인딩 시각이 다를 수 있음을 정확히 표현했다.
  • ④ 오답: 스택 동적 변수의 해제는 호출 종료에 맞춰 자동으로 이루어진다.

참고 자료와 작성 기준

이 글은 해당 차시 강의자료를 바탕으로 학습 목적에 맞게 재구성한 비공식 학습자료입니다. 속성별 바인딩 판정, 변수 수명 추적, 비교 사례와 문제 해설은 학습자의 이해를 돕도록 구성하고 검토했습니다.

  • 작성·편집: 올에이클래스 학습연구팀
  • 주요 근거: 한국방송통신대학교 컴퓨터과학과 프로그래밍언어론 제7강 「변수와 바인딩」 강의자료(2025)
  • 보충 자료: 별도의 외부 자료를 사용하지 않음
  • 편집 원칙: 올에이클래스 편집 정책
  • 최종 내용 검토: 2026-08-29

댓글