변수와 바인딩
- 변수란 데이터를 저장하거나 나중에 사용할 수 있도록 메모리를 추상화한 것
- 변수의 속성 4가지 : 변수명, 타입, 주소, 값
- 변수의 속성에서 변수명이란 변수의 이름, 식별자
- 변수의 속성에서 타입이란 변수에 저장할 수 있는 데이터 집합의 종류, 자료형
- 변수의 속성에서 주소란 변수가 사용하는 메모리의 위치 ,' 참조'
- 변수의 속성에서 값이란 변수에 저장된 데이터. 수행시간 동안 변경될 수 있음
- 변수의 수명이란 변수가 값을 저장하기 위해 기억장소를 할당받고 있는 기간
- 변수의 영역이란 프로그램에서 사용되는 식별자가 의미를 가질 수 있는 범위
- 배런의 표기법은 가장 왼쪽에 변수명, 가운데에 타입, 그리고 가장 오른쪽에 주소를 표기하고 주소 안에 값을 표기함으로써 변수를 표현
- 바인딩이란 언어 구성 요소의 속성이 구체적으로 결정되는 것을 의미
- 바인딩이 일어나는 시점을 바인딩 시각이라고 함
- 바인딩 시각 - 언어의 정의 시점 : 연산자의 의미, 수의 의미
- 바인딩 시각 - 언어의 구현 시점 : 타입의 자릿수, 수의 표기법
- 바인딩 시각 - 컴파일 시점 : 변수의 타입 등
- 바인딩 시각 - 링크 시점 : 라이브러리 함수의 내용 등
- 바인딩 시각 - 로드 시점 : 변수의 주소 등
- 바인딩 시각 - 프로그램 수행 시점 : 변수 의 값 등
- 정적 바인딩은 프로그램 수행 시점에 바인딩의 변화가 없는 경우로 바인딩 시각이 언어의 정의 시점부터 로드 시점까지인 경우를 모두 정적 바인딩이라 부름
- 정적 바인딩은 프로그램 수행 이전에 바인딩 되므로 수행할 때에는 바인딩을 위한 별도의 노력이 필요하지 않아 프로그램 수행 시간의 효율성이 높음 -> 컴파일 시점
- 동적 바인딩은 프로그램 수행 시점에 바인딩되거나 바인딩이 해지되는 경우를 의미
- 동적 바인딩은 프로그램을 수행하면서 상황에 맞게 바인딩을 할 수 있어 유연한 프로그래밍이 가능 -> 인터프리터
- 변수의 바인딩이란 변수의 속성이 구체적으로 결정되는 것
- int *p는 포인터 타입의 변수 p를 선언하는 것으로 인트 타입의 변수의 주소를 값으로 가짐 -> 이름 없는 변수
- 일반적인 변수의 속성별 바인딩 순서 : 1) 변수명 바인딩 2) 타입 바인딩 3) 주소 바인딩 4) 값 바인딩
- 명시적 선언은 선언문을 이용하는 것으로 선언문에 명시된 이름으로 변수명 바인딩
- 묵시적 선언은 선언문 업이 대입문 등에 처음 사용된 이름으로 변수명 바인딩
- Fortran -> 변수명의 시작 알파벳에 따라 바인딩
- 명시적 선언과 묵시적 선언 모두 컴파일 시점에 구문 분석을 통해 타입을 판단할 수 있으므로 많은 언어들이 정적으로 타입 바인딩
- 변수의 타입을 고정하지 않고 대입할 값에 맞추어 계속 변화시키는 언어는 동적 바인딩에 해당
- 동적으로 타입을 바인딩하는 대표적인 언어로는 APL, SNOBOL 4, Python 등
- 주소 바인딩이란 변수가 사용할 메모리가 할당되어 변수의 주소가 그 메모리의 주소로 바인딩 되는 것
- 변수의 주소를 바인딩하는 방법 중 자동 할당은 명시적 선언이나 묵시적 선언을 통해 정해진 변수의 타입에 맞추어 필요한 메모리를 할당
- 수동할당은 프로그래머가 지정한 크기만큼의 메모리를 할당
- 할당 : 가용한 메모리 중 필요한 만큼의 공간을 변수에 배정, 해제: 할당된 메모리를 변수로부터 회수
- 주소 바인딩을 위한 메모리 구조는 코드 + 정적 데이터를 정적 세그먼트라고 하고, 스택 + 힙을 동적 세그먼트라고 함
- 자동할당 -> 상황/언어에 따라 정적 또는 동적 세그먼트 활용
- 수동할당 -> 동적 세그먼트의 힙 활용
- 정적 바인딩: 로드 시점에 정적 세그먼트의 주소를 바인딩
- 동적 바인딩은 프로그램 수행 중 변수가 사용되는 시점에 동적 세그먼트의 주소를 바인딩
- 동적 변수는 동적 세그먼트의 사용 영역에 따라 구분 되며, 스택 동적 변수, 힙 동적 변수로 구분
- 스택 동적 변수는 스택에서 메모리를 할당 받는 것으로서, 자동 할당을 이용하는 변수 중 정적 변수가 아닌 경우임. 필요한 시점에 자동으로 할당 해제 됨
- 동적 변수 중 힙 동적 변수는 동적 세그먼트 중 힙에서 메모리를 할당 받는 변수이며, 힙 동적 변수의 한 가지는 ㅅ구동 할당을 이용하는 변수ㅡ로 프로그래머의 지정을 통해 이루어짐
문제
1. 변수의 속성 중 타입은 무엇을 의미하는가?
- 변수가 사용하는 메모리의 위치
- 변수에 저장할 수 있는 데이터 집합의 종류
- 변수에 저장된 데이터
- 변수의 이름
정답: 2. 변수에 저장할 수 있는 데이터 집합의 종류
해설: 변수의 타입은 해당 변수에 저장할 수 있는 데이터의 종류를 정의한다. 예를 들어, 정수형(int), 실수형(float), 문자형(char) 등이 있다.
2. 바인딩 시각 중 '언어의 구현 시점'에 해당하는 것은 무엇인가?
- 변수의 타입
- 타입의 자릿수 및 수의 표기법
- 연산자의 의미
- 변수의 값
정답: 2. 타입의 자릿수 및 수의 표기법
해설: '언어의 구현 시점' 바인딩에는 타입의 자릿수와 수의 표기법 등이 포함되며, 이는 언어가 구현되는 단계에서 결정된다.
3. 정적 바인딩의 특징은 무엇인가?
- 프로그램 수행 시점에 바인딩의 변화가 있는 경우
- 프로그램 수행 이전에 바인딩 되므로 수행 시 효율성이 높음
- 상황에 맞게 바인딩을 할 수 있는 유연성을 제공
- 변수의 값이 프로그램 수행 중에 결정됨
정답: 2. 프로그램 수행 이전에 바인딩 되므로 수행 시 효율성이 높음
해설: 정적 바인딩은 프로그램 수행 이전에 모든 바인딩이 완료되므로, 프로그램 실행 중에 바인딩을 위한 추가적인 노력이 필요 없어 수행 시간의 효율성이 높아진다.
4. 동적 바인딩은 어떤 경우에 사용되는가?
- 프로그램 수행 시점에 바인딩이 일어나거나 해지되는 경우
- 변수의 타입이 컴파일 시점에 결정되는 경우
- 변수의 주소가 로드 시점에 결정되는 경우
- 연산자의 의미가 언어의 정의 시점에 결정되는 경우
정답: 1. 프로그램 수행 시점에 바인딩이 일어나거나 해지되는 경우
해설: 동적 바인딩은 프로그램을 실행하는 동안 바인딩이 이루어지거나 변경되는 경우를 말한다. 이를 통해 프로그램은 더 유연하게 작동할 수 있다.
5. 'int *p'의 선언이 의미하는 것은 무엇인가?
- 정수형 변수 p의 선언
- 포인터 타입의 변수 p의 선언으로, 정수형 변수의 주소를 가짐
- 포인터 타입의 변수 p의 선언으로, 실수형 변수의 주소를 가짐
- 정수형 배열 p의 선언
정답: 2. 포인터 타입의 변수 p의 선언으로, 정수형 변수의 주소를 가짐
해설: 'int *p'는 포인터 타입의 변수 p를 선언하는 것으로, p는 정수형 변수의 주소를 저장하는 역할을 한다.
6. 명시적 선언과 묵시적 선언의 차이점은 무엇인가?
- 명시적 선언은 선언문을 이용하지만, 묵시적 선언은 대입문에 처음 사용된 이름으로 이루어짐
- 명시적 선언은 프로그램 수행 중에 이루어지지만, 묵시적 선언은 컴파일 시점에 이루어짐
- 명시적 선언은 변수의 타입을 바인딩하지 않지만, 묵시적 선언은 타입을 바인딩함
- 명시적 선언은 항상 정적 바인딩을 사용하지만, 묵시적 선언은 동적 바인딩을 사용함
정답: 1. 명시적 선언은 선언문을 이용하지만, 묵시적 선언은 대입문에 처음 사용된 이름으로 이루어짐
해설: 명시적 선언은 선언문을 통해 변수를 정의하는 반면, 묵시적 선언은 변수가 프로그램에서 처음 사용될 때 자동으로 선언된다.
7. Fortran 언어에서 변수명의 시작 알파벳에 따라 타입이 결정되는 것은 어떤 종류의 바인딩인가?
- 정적 바인딩
- 동적 바인딩
- 묵시적 선언
- 명시적 선언
정답: 3. 묵시적 선언
해설: Fortran 언어에서는 변수명의 시작 알파벳에 따라 타입이 자동으로 결정되는 묵시적 선언 방식을 사용한다.
8. 변수의 수명이란 무엇을 의미하는가?
- 변수가 프로그램 내에서 사용되는 기간
- 변수가 메모리에 할당되어 있는 기간
- 변수의 타입이 유지되는 기간
- 변수가 메모리에서 해제되기까지의 기간
정답: 2. 변수가 메모리에 할당되어 있는 기간
해설: 변수의 수명은 변수가 메모리에 할당되어 값을 저장할 수 있는 기간을 의미한다.
9. 동적 세그먼트 중 '힙'에 할당되는 변수의 종류는 무엇인가?
- 정적 변수
- 스택 동적 변수
- 힙 동적 변수
- 글로벌 변수
정답: 3. 힙 동적 변수
해설: 힙 동적 변수는 동적 세그먼트 중 '힙' 영역에 메모리를 할당 받는 변수를 말한다. 이는 프로그래머의 지정에 의해 할당 및 해제가 이루어진다.
10. 변수의 주소 바인딩 방법 중 '수동할당'이란 무엇인가?
- 변수의 타입에 맞추어 필요한 메모리를 자동으로 할당하는 것
- 프로그래머가 지정한 크기만큼의 메모리를 할당하는 것
- 프로그램 수행 중 동적으로 메모리를 할당하는 것
- 컴파일 시점에 메모리의 위치를 결정하는 것
정답: 2. 프로그래머가 지정한 크기만큼의 메모리를 할당하는 것
해설: 수동할당은 프로그래머가 직접 메모리 크기를 지정하여 변수에 할당하는 방법을 의미한다.
11. 변수의 영역이란 무엇인가?
- 변수가 메모리에 할당된 위치
- 프로그램에서 사용되는 식별자가 의미를 가질 수 있는 범위
- 변수의 타입이 결정되는 범위
- 변수의 수명이 유지되는 기간
정답: 2. 프로그램에서 사용되는 식별자가 의미를 가질 수 있는 범위
해설: 변수의 영역은 프로그램 내에서 해당 변수나 식별자가 유효하고 의미를 가질 수 있는 범위를 의미한다.
12. 배런의 표기법에서 주소 안에 값이 표기되는 이유는 무엇인가?
- 변수의 타입을 명시하기 위해
- 변수의 수명을 나타내기 위해
- 변수가 참조하는 메모리 위치를 나타내기 위해
- 변수에 저장된 데이터를 나타내기 위해
정답: 4. 변수에 저장된 데이터를 나타내기 위해
해설: 배런의 표기법에서 주소 안에 값이 표기되는 것은 해당 변수에 저장된 실제 데이터를 나타내기 위함이다.
13. '언어의 정의 시점' 바인딩에 해당하는 것은 무엇인가?
- 변수의 타입
- 연산자의 의미
- 변수의 주소
- 변수의 값
정답: 2. 연산자의 의미
해설: '언어의 정의 시점' 바인딩은 언어가 정의될 때 결정되는 것들을 의미하며, 이에는 연산자의 의미 등이 포함된다.
14. 정적 바인딩의 경우, 바인딩 시각은 언제인가?
- 프로그램 수행 시점
- 로드 시점
- 컴파일 시점
- 언어의 정의 시점부터 로드 시점까지
정답: 4. 언어의 정의 시점부터 로드 시점까지
해설: 정적 바인딩은 언어의 정의 시점부터 로드 시점까지 이루어지며, 이 시기에 모든 바인딩이 완료된다.
15. 변수의 수명은 무엇을 의미하는가?
- 변수가 프로그램 내에서 사용되는 기간
- 변수가 메모리에 할당되어 있는 기간
- 변수의 타입이 유지되는 기간
- 변수가 메모리에서 해제되기까지의 기간
정답: 2. 변수가 메모리에 할당되어 있는 기간
해설: 변수의 수명은 해당 변수가 메모리에 할당되어 값을 저장할 수 있는 기간을 의미한다.
16. 동적 타입 바인딩을 사용하는 프로그래밍 언어의 예는 무엇인가?
- C++
- Python
- Java
- C
정답: 2. Python
해설: Python은 동적 타입 바인딩을 사용하는 프로그래밍 언어의 예로, 변수의 타입이 프로그램 수행 시점에 결정된다.
17. 자동 할당이란 무엇인가?
- 프로그래머가 직접 메모리 크기를 지정하여 변수에 할당하는 것
- 명시적 선언이나 묵시적 선언을 통해 정해진 변수의 타입에 맞추어 필요한 메모리를 할당하는 것
- 프로그램 수행 중 동적으로 메모리를 할당하는 것
- 컴파일 시점에 메모리의 위치를 결정하는 것
정답: 2. 명시적 선언이나 묵시적 선언을 통해 정해진 변수의 타입에 맞추어 필요한 메모리를 할당하는 것
해설: 자동 할당은 컴파일러가 변수의 타입을 기반으로 필요한 메모리를 자동으로 할당하는 방식을 말한다.
18. 스택 동적 변수와 힙 동적 변수의 차이점은 무엇인가?
- 할당된 메모리 위치의 차이
- 변수의 수명의 차이
- 변수의 타입의 차이
- 변수의 값이 저장되는 방식의 차이
정답: 1. 할당된 메모리 위치의 차이
해설: 스택 동적 변수는 스택에서 메모리를 할당 받는 반면, 힙 동적 변수는 힙에서 메모리를 할당 받는다.
19. 동적 세그먼트의 구조에 포함되는 요소는 무엇인가?
- 코드와 정적 데이터
- 스택과 힙
- 변수의 이름과 타입
- 함수와 클래스
정답: 2. 스택과 힙
해설: 동적 세그먼트의 구조에는 스택과 힙이 포함되며, 이는 변수의 동적 할당과 관련이 있다.
20. 프로그램 수행 시점에 바인딩되는 변수의 속성은 무엇인가?
- 변수의 타입
- 변수의 이름
- 변수의 주소
- 변수의 값
정답: 4. 변수의 값
해설: 프로그램 수행 시점에 바인딩되는 변수의 속성은 그 변수의 값으로, 실행 중에 결정된다.
21. 변수의 타입 바인딩 시점은 언제인가?
- 프로그램 수행 시점
- 로드 시점
- 컴파일 시점
- 언어의 정의 시점
정답: 3. 컴파일 시점
해설: 변수의 타입은 컴파일 시점에 바인딩된다. 이는 프로그램의 구문 분석 단계에서 결정된다.
22. 동적 변수 중 스택 동적 변수의 특징은 무엇인가?
- 프로그래머가 메모리를 직접 할당하고 해제함
- 자동 할당을 이용하여 필요한 시점에 할당되고 해제됨
- 힙 영역에서 메모리를 할당 받음
- 프로그램의 정적 세그먼트에서 메모리를 할당 받음
정답: 2. 자동 할당을 이용하여 필요한 시점에 할당되고 해제됨
해설: 스택 동적 변수는 자동 할당을 이용하여 필요한 시점에 메모리를 할당받고, 사용이 끝나면 자동으로 해제된다.
23. 변수의 수동 할당이란 무엇인가?
- 컴파일러가 자동으로 메모리 크기를 할당하는 것
- 프로그램 수행 중 동적으로 메모리를 할당하는 것
- 프로그래머가 지정한 크기만큼 메모리를 할당하는 것
- 시스템이 필요한 만큼의 메모리를 자동으로 할당하는 것
정답: 3. 프로그래머가 지정한 크기만큼 메모리를 할당하는 것
해설: 수동 할당은 프로그래머가 직접 메모리의 크기를 지정하고 할당하는 방법이다.
24. 명시적 선언과 묵시적 선언의 차이점은 무엇인가?
- 명시적 선언은 컴파일 시점에 이루어지지만, 묵시적 선언은 프로그램 수행 시점에 이루어짐
- 명시적 선언은 선언문을 이용하지만, 묵시적 선언은 대입문에 처음 사용된 이름으로 이루어짐
- 명시적 선언은 변수의 타입을 바인딩하지 않지만, 묵시적 선언은 타입을 바인딩함
- 명시적 선언은 항상 정적 바인딩을 사용하지만, 묵시적 선언은 동적 바인딩을 사용함
정답: 2. 명시적 선언은 선언문을 이용하지만, 묵시적 선언은 대입문에 처음 사용된 이름으로 이루어짐
해설: 명시적 선언은 선언문을 통해 변수를 정의하는 반면, 묵시적 선언은 변수가 프로그램에서 처음 사용될 때 자동으로 선언된다.
25. Python에서 변수
의 타입 바인딩은 어떻게 이루어지는가?
- 컴파일 시점에 정적으로 결정됨
- 프로그램 수행 시점에 동적으로 결정됨
- 로드 시점에 결정됨
- 프로그램 링크 시점에 결정됨
정답: 2. 프로그램 수행 시점에 동적으로 결정됨
해설: Python은 동적 타입 언어로서, 변수의 타입은 프로그램 수행 시점에 동적으로 결정된다.
26. 정적 바인딩과 동적 바인딩의 주요 차이점은 무엇인가?
- 바인딩 시점의 차이
- 변수의 타입의 차이
- 메모리 할당 방식의 차이
- 프로그래밍 언어의 종류의 차이
정답: 1. 바인딩 시점의 차이
해설: 정적 바인딩은 프로그램 수행 이전에 모든 바인딩이 완료되는 반면, 동적 바인딩은 프로그램 수행 중에 바인딩이 이루어진다.
27. 변수의 주소 바인딩이란 무엇인가?
- 변수의 타입을 결정하는 과정
- 변수가 사용할 메모리의 위치를 결정하는 과정
- 변수의 값이 결정되는 과정
- 변수의 이름을 결정하는 과정
정답: 2. 변수가 사용할 메모리의 위치를 결정하는 과정
해설: 주소 바인딩은 변수가 메모리 상에서 사용할 위치를 결정하는 과정을 의미한다.
28. 프로그램의 동적 세그먼트는 무엇을 포함하는가?
- 코드와 정적 데이터
- 스택과 힙
- 변수의 이름과 타입
- 함수와 클래스
정답: 2. 스택과 힙
해설: 프로그램의 동적 세그먼트는 스택과 힙을 포함하며, 이는 동적 변수 할당과 관련이 있다.
29. Fortran 언어에서 변수명의 시작 알파벳에 따라 타입이 결정되는 것은 어떤 종류의 바인딩인가?
- 정적 바인딩
- 동적 바인딩
- 묵시적 선언
- 명시적 선언
정답: 3. 묵시적 선언
해설: Fortran 언어에서는 변수명의 시작 알파벳에 따라 타입이 자동으로 결정되는 묵시적 선언 방식을 사용한다.
30. 변수의 수명이란 무엇인가?
- 변수가 프로그램 내에서 사용되는 기간
- 변수가 메모리에 할당되어 있는 기간
- 변수의 타입이 유지되는 기간
- 변수가 메모리에서 해제되기까지의 기간
정답: 2. 변수가 메모리에 할당되어 있는 기간
해설: 변수의 수명은 변수가 메모리에 할당되어 값을 저장할 수 있는 기간을 의미한다.
'CS > 프로그래밍언어론' 카테고리의 다른 글
프로그래밍 언어에서 타입, 복합 타입 정리 및 문제 풀이 (1) | 2023.12.08 |
---|---|
변수의 영역 , 정적 영역, 동적 영역, 지역 변수, 정적 영역 규칙 - 방통대 프로그래밍 언어론 기말 고사 기출 유사 문제 풀이 (1) | 2023.12.08 |
프로그래밍 언어의 구현 , 파스트리, 구문 트리, 순환 하강 구문 분석기 관련 문제 - 방통대 기말 시험 대비 (1) | 2023.12.08 |
구문 분석, 파스 트리 용어 정리 및 예상 문제 풀이 - 방통대 프로그래밍 언어론 (1) | 2023.12.08 |
구문론과 의미론 용어 정리 및 연습 문제 풀이 - 프로그래밍 언어론 (1) | 2023.12.08 |