본문 바로가기
CS/프로그래밍언어론

프로그래밍 언어론 변수와 바인딩 기말고사 대비 문제 풀이 및 요약 정리

by Renechoi 2023. 12. 8.

변수와 바인딩

  1. 변수란 데이터를 저장하거나 나중에 사용할 수 있도록 메모리를 추상화한 것
  2. 변수의 속성 4가지 : 변수명, 타입, 주소, 값
  3. 변수의 속성에서 변수명이란 변수의 이름, 식별자
  4. 변수의 속성에서 타입이란 변수에 저장할 수 있는 데이터 집합의 종류, 자료형
  5. 변수의 속성에서 주소란 변수가 사용하는 메모리의 위치 ,' 참조'
  6. 변수의 속성에서 값이란 변수에 저장된 데이터. 수행시간 동안 변경될 수 있음
  7. 변수의 수명이란 변수가 값을 저장하기 위해 기억장소를 할당받고 있는 기간
  8. 변수의 영역이란 프로그램에서 사용되는 식별자가 의미를 가질 수 있는 범위
  9. 배런의 표기법은 가장 왼쪽에 변수명, 가운데에 타입, 그리고 가장 오른쪽에 주소를 표기하고 주소 안에 값을 표기함으로써 변수를 표현
  10. 바인딩이란 언어 구성 요소의 속성이 구체적으로 결정되는 것을 의미
  11. 바인딩이 일어나는 시점을 바인딩 시각이라고 함
  12. 바인딩 시각 - 언어의 정의 시점 : 연산자의 의미, 수의 의미
  13. 바인딩 시각 - 언어의 구현 시점 : 타입의 자릿수, 수의 표기법
  14. 바인딩 시각 - 컴파일 시점 : 변수의 타입 등
  15. 바인딩 시각 - 링크 시점 : 라이브러리 함수의 내용 등
  16. 바인딩 시각 - 로드 시점 : 변수의 주소 등
  17. 바인딩 시각 - 프로그램 수행 시점 : 변수 의 값 등
  18. 정적 바인딩은 프로그램 수행 시점에 바인딩의 변화가 없는 경우로 바인딩 시각이 언어의 정의 시점부터 로드 시점까지인 경우를 모두 정적 바인딩이라 부름
  19. 정적 바인딩은 프로그램 수행 이전에 바인딩 되므로 수행할 때에는 바인딩을 위한 별도의 노력이 필요하지 않아 프로그램 수행 시간의 효율성이 높음 -> 컴파일 시점
  20. 동적 바인딩은 프로그램 수행 시점에 바인딩되거나 바인딩이 해지되는 경우를 의미
  21. 동적 바인딩은 프로그램을 수행하면서 상황에 맞게 바인딩을 할 수 있어 유연한 프로그래밍이 가능 -> 인터프리터
  22. 변수의 바인딩이란 변수의 속성이 구체적으로 결정되는 것
  23. int *p는 포인터 타입의 변수 p를 선언하는 것으로 인트 타입의 변수의 주소를 값으로 가짐 -> 이름 없는 변수
  24. 일반적인 변수의 속성별 바인딩 순서 : 1) 변수명 바인딩 2) 타입 바인딩 3) 주소 바인딩 4) 값 바인딩
  25. 명시적 선언은 선언문을 이용하는 것으로 선언문에 명시된 이름으로 변수명 바인딩
  26. 묵시적 선언은 선언문 업이 대입문 등에 처음 사용된 이름으로 변수명 바인딩
  27. Fortran -> 변수명의 시작 알파벳에 따라 바인딩
  28. 명시적 선언과 묵시적 선언 모두 컴파일 시점에 구문 분석을 통해 타입을 판단할 수 있으므로 많은 언어들이 정적으로 타입 바인딩
  29. 변수의 타입을 고정하지 않고 대입할 값에 맞추어 계속 변화시키는 언어는 동적 바인딩에 해당
  30. 동적으로 타입을 바인딩하는 대표적인 언어로는 APL, SNOBOL 4, Python 등
  31. 주소 바인딩이란 변수가 사용할 메모리가 할당되어 변수의 주소가 그 메모리의 주소로 바인딩 되는 것
  32. 변수의 주소를 바인딩하는 방법 중 자동 할당은 명시적 선언이나 묵시적 선언을 통해 정해진 변수의 타입에 맞추어 필요한 메모리를 할당
  33. 수동할당은 프로그래머가 지정한 크기만큼의 메모리를 할당
  34. 할당 : 가용한 메모리 중 필요한 만큼의 공간을 변수에 배정, 해제: 할당된 메모리를 변수로부터 회수
  35. 주소 바인딩을 위한 메모리 구조는 코드 + 정적 데이터를 정적 세그먼트라고 하고, 스택 + 힙을 동적 세그먼트라고 함
  36. 자동할당 -> 상황/언어에 따라 정적 또는 동적 세그먼트 활용
  37. 수동할당 -> 동적 세그먼트의 힙 활용
  38. 정적 바인딩: 로드 시점에 정적 세그먼트의 주소를 바인딩
  39. 동적 바인딩은 프로그램 수행 중 변수가 사용되는 시점에 동적 세그먼트의 주소를 바인딩
  40. 동적 변수는 동적 세그먼트의 사용 영역에 따라 구분 되며, 스택 동적 변수, 힙 동적 변수로 구분
  41. 스택 동적 변수는 스택에서 메모리를 할당 받는 것으로서, 자동 할당을 이용하는 변수 중 정적 변수가 아닌 경우임. 필요한 시점에 자동으로 할당 해제 됨
  42. 동적 변수 중 힙 동적 변수는 동적 세그먼트 중 힙에서 메모리를 할당 받는 변수이며, 힙 동적 변수의 한 가지는 ㅅ구동 할당을 이용하는 변수ㅡ로 프로그래머의 지정을 통해 이루어짐

문제

1. 변수의 속성 중 타입은 무엇을 의미하는가?

  1. 변수가 사용하는 메모리의 위치
  2. 변수에 저장할 수 있는 데이터 집합의 종류
  3. 변수에 저장된 데이터
  4. 변수의 이름

정답: 2. 변수에 저장할 수 있는 데이터 집합의 종류
해설: 변수의 타입은 해당 변수에 저장할 수 있는 데이터의 종류를 정의한다. 예를 들어, 정수형(int), 실수형(float), 문자형(char) 등이 있다.

2. 바인딩 시각 중 '언어의 구현 시점'에 해당하는 것은 무엇인가?

  1. 변수의 타입
  2. 타입의 자릿수 및 수의 표기법
  3. 연산자의 의미
  4. 변수의 값

정답: 2. 타입의 자릿수 및 수의 표기법
해설: '언어의 구현 시점' 바인딩에는 타입의 자릿수와 수의 표기법 등이 포함되며, 이는 언어가 구현되는 단계에서 결정된다.

3. 정적 바인딩의 특징은 무엇인가?

  1. 프로그램 수행 시점에 바인딩의 변화가 있는 경우
  2. 프로그램 수행 이전에 바인딩 되므로 수행 시 효율성이 높음
  3. 상황에 맞게 바인딩을 할 수 있는 유연성을 제공
  4. 변수의 값이 프로그램 수행 중에 결정됨

정답: 2. 프로그램 수행 이전에 바인딩 되므로 수행 시 효율성이 높음
해설: 정적 바인딩은 프로그램 수행 이전에 모든 바인딩이 완료되므로, 프로그램 실행 중에 바인딩을 위한 추가적인 노력이 필요 없어 수행 시간의 효율성이 높아진다.

4. 동적 바인딩은 어떤 경우에 사용되는가?

  1. 프로그램 수행 시점에 바인딩이 일어나거나 해지되는 경우
  2. 변수의 타입이 컴파일 시점에 결정되는 경우
  3. 변수의 주소가 로드 시점에 결정되는 경우
  4. 연산자의 의미가 언어의 정의 시점에 결정되는 경우

정답: 1. 프로그램 수행 시점에 바인딩이 일어나거나 해지되는 경우
해설: 동적 바인딩은 프로그램을 실행하는 동안 바인딩이 이루어지거나 변경되는 경우를 말한다. 이를 통해 프로그램은 더 유연하게 작동할 수 있다.

5. 'int *p'의 선언이 의미하는 것은 무엇인가?

  1. 정수형 변수 p의 선언
  2. 포인터 타입의 변수 p의 선언으로, 정수형 변수의 주소를 가짐
  3. 포인터 타입의 변수 p의 선언으로, 실수형 변수의 주소를 가짐
  4. 정수형 배열 p의 선언

정답: 2. 포인터 타입의 변수 p의 선언으로, 정수형 변수의 주소를 가짐
해설: 'int *p'는 포인터 타입의 변수 p를 선언하는 것으로, p는 정수형 변수의 주소를 저장하는 역할을 한다.

6. 명시적 선언과 묵시적 선언의 차이점은 무엇인가?

  1. 명시적 선언은 선언문을 이용하지만, 묵시적 선언은 대입문에 처음 사용된 이름으로 이루어짐
  2. 명시적 선언은 프로그램 수행 중에 이루어지지만, 묵시적 선언은 컴파일 시점에 이루어짐
  3. 명시적 선언은 변수의 타입을 바인딩하지 않지만, 묵시적 선언은 타입을 바인딩함
  4. 명시적 선언은 항상 정적 바인딩을 사용하지만, 묵시적 선언은 동적 바인딩을 사용함

정답: 1. 명시적 선언은 선언문을 이용하지만, 묵시적 선언은 대입문에 처음 사용된 이름으로 이루어짐
해설: 명시적 선언은 선언문을 통해 변수를 정의하는 반면, 묵시적 선언은 변수가 프로그램에서 처음 사용될 때 자동으로 선언된다.

7. Fortran 언어에서 변수명의 시작 알파벳에 따라 타입이 결정되는 것은 어떤 종류의 바인딩인가?

  1. 정적 바인딩
  2. 동적 바인딩
  3. 묵시적 선언
  4. 명시적 선언

정답: 3. 묵시적 선언
해설: Fortran 언어에서는 변수명의 시작 알파벳에 따라 타입이 자동으로 결정되는 묵시적 선언 방식을 사용한다.

8. 변수의 수명이란 무엇을 의미하는가?

  1. 변수가 프로그램 내에서 사용되는 기간
  2. 변수가 메모리에 할당되어 있는 기간
  3. 변수의 타입이 유지되는 기간
  4. 변수가 메모리에서 해제되기까지의 기간

정답: 2. 변수가 메모리에 할당되어 있는 기간
해설: 변수의 수명은 변수가 메모리에 할당되어 값을 저장할 수 있는 기간을 의미한다.

9. 동적 세그먼트 중 '힙'에 할당되는 변수의 종류는 무엇인가?

  1. 정적 변수
  2. 스택 동적 변수
  3. 힙 동적 변수
  4. 글로벌 변수

정답: 3. 힙 동적 변수
해설: 힙 동적 변수는 동적 세그먼트 중 '힙' 영역에 메모리를 할당 받는 변수를 말한다. 이는 프로그래머의 지정에 의해 할당 및 해제가 이루어진다.

10. 변수의 주소 바인딩 방법 중 '수동할당'이란 무엇인가?

  1. 변수의 타입에 맞추어 필요한 메모리를 자동으로 할당하는 것
  2. 프로그래머가 지정한 크기만큼의 메모리를 할당하는 것
  3. 프로그램 수행 중 동적으로 메모리를 할당하는 것
  4. 컴파일 시점에 메모리의 위치를 결정하는 것

정답: 2. 프로그래머가 지정한 크기만큼의 메모리를 할당하는 것
해설: 수동할당은 프로그래머가 직접 메모리 크기를 지정하여 변수에 할당하는 방법을 의미한다.

11. 변수의 영역이란 무엇인가?

  1. 변수가 메모리에 할당된 위치
  2. 프로그램에서 사용되는 식별자가 의미를 가질 수 있는 범위
  3. 변수의 타입이 결정되는 범위
  4. 변수의 수명이 유지되는 기간

정답: 2. 프로그램에서 사용되는 식별자가 의미를 가질 수 있는 범위
해설: 변수의 영역은 프로그램 내에서 해당 변수나 식별자가 유효하고 의미를 가질 수 있는 범위를 의미한다.

12. 배런의 표기법에서 주소 안에 값이 표기되는 이유는 무엇인가?

  1. 변수의 타입을 명시하기 위해
  2. 변수의 수명을 나타내기 위해
  3. 변수가 참조하는 메모리 위치를 나타내기 위해
  4. 변수에 저장된 데이터를 나타내기 위해

정답: 4. 변수에 저장된 데이터를 나타내기 위해
해설: 배런의 표기법에서 주소 안에 값이 표기되는 것은 해당 변수에 저장된 실제 데이터를 나타내기 위함이다.

13. '언어의 정의 시점' 바인딩에 해당하는 것은 무엇인가?

  1. 변수의 타입
  2. 연산자의 의미
  3. 변수의 주소
  4. 변수의 값

정답: 2. 연산자의 의미
해설: '언어의 정의 시점' 바인딩은 언어가 정의될 때 결정되는 것들을 의미하며, 이에는 연산자의 의미 등이 포함된다.

14. 정적 바인딩의 경우, 바인딩 시각은 언제인가?

  1. 프로그램 수행 시점
  2. 로드 시점
  3. 컴파일 시점
  4. 언어의 정의 시점부터 로드 시점까지

정답: 4. 언어의 정의 시점부터 로드 시점까지
해설: 정적 바인딩은 언어의 정의 시점부터 로드 시점까지 이루어지며, 이 시기에 모든 바인딩이 완료된다.

15. 변수의 수명은 무엇을 의미하는가?

  1. 변수가 프로그램 내에서 사용되는 기간
  2. 변수가 메모리에 할당되어 있는 기간
  3. 변수의 타입이 유지되는 기간
  4. 변수가 메모리에서 해제되기까지의 기간

정답: 2. 변수가 메모리에 할당되어 있는 기간
해설: 변수의 수명은 해당 변수가 메모리에 할당되어 값을 저장할 수 있는 기간을 의미한다.

16. 동적 타입 바인딩을 사용하는 프로그래밍 언어의 예는 무엇인가?

  1. C++
  2. Python
  3. Java
  4. C

정답: 2. Python
해설: Python은 동적 타입 바인딩을 사용하는 프로그래밍 언어의 예로, 변수의 타입이 프로그램 수행 시점에 결정된다.

17. 자동 할당이란 무엇인가?

  1. 프로그래머가 직접 메모리 크기를 지정하여 변수에 할당하는 것
  2. 명시적 선언이나 묵시적 선언을 통해 정해진 변수의 타입에 맞추어 필요한 메모리를 할당하는 것
  3. 프로그램 수행 중 동적으로 메모리를 할당하는 것
  4. 컴파일 시점에 메모리의 위치를 결정하는 것

정답: 2. 명시적 선언이나 묵시적 선언을 통해 정해진 변수의 타입에 맞추어 필요한 메모리를 할당하는 것
해설: 자동 할당은 컴파일러가 변수의 타입을 기반으로 필요한 메모리를 자동으로 할당하는 방식을 말한다.

18. 스택 동적 변수와 힙 동적 변수의 차이점은 무엇인가?

  1. 할당된 메모리 위치의 차이
  2. 변수의 수명의 차이
  3. 변수의 타입의 차이
  4. 변수의 값이 저장되는 방식의 차이

정답: 1. 할당된 메모리 위치의 차이
해설: 스택 동적 변수는 스택에서 메모리를 할당 받는 반면, 힙 동적 변수는 힙에서 메모리를 할당 받는다.

19. 동적 세그먼트의 구조에 포함되는 요소는 무엇인가?

  1. 코드와 정적 데이터
  2. 스택과 힙
  3. 변수의 이름과 타입
  4. 함수와 클래스

정답: 2. 스택과 힙
해설: 동적 세그먼트의 구조에는 스택과 힙이 포함되며, 이는 변수의 동적 할당과 관련이 있다.

20. 프로그램 수행 시점에 바인딩되는 변수의 속성은 무엇인가?

  1. 변수의 타입
  2. 변수의 이름
  3. 변수의 주소
  4. 변수의 값

정답: 4. 변수의 값
해설: 프로그램 수행 시점에 바인딩되는 변수의 속성은 그 변수의 값으로, 실행 중에 결정된다.

21. 변수의 타입 바인딩 시점은 언제인가?

  1. 프로그램 수행 시점
  2. 로드 시점
  3. 컴파일 시점
  4. 언어의 정의 시점

정답: 3. 컴파일 시점
해설: 변수의 타입은 컴파일 시점에 바인딩된다. 이는 프로그램의 구문 분석 단계에서 결정된다.

22. 동적 변수 중 스택 동적 변수의 특징은 무엇인가?

  1. 프로그래머가 메모리를 직접 할당하고 해제함
  2. 자동 할당을 이용하여 필요한 시점에 할당되고 해제됨
  3. 힙 영역에서 메모리를 할당 받음
  4. 프로그램의 정적 세그먼트에서 메모리를 할당 받음

정답: 2. 자동 할당을 이용하여 필요한 시점에 할당되고 해제됨
해설: 스택 동적 변수는 자동 할당을 이용하여 필요한 시점에 메모리를 할당받고, 사용이 끝나면 자동으로 해제된다.

23. 변수의 수동 할당이란 무엇인가?

  1. 컴파일러가 자동으로 메모리 크기를 할당하는 것
  2. 프로그램 수행 중 동적으로 메모리를 할당하는 것
  3. 프로그래머가 지정한 크기만큼 메모리를 할당하는 것
  4. 시스템이 필요한 만큼의 메모리를 자동으로 할당하는 것

정답: 3. 프로그래머가 지정한 크기만큼 메모리를 할당하는 것
해설: 수동 할당은 프로그래머가 직접 메모리의 크기를 지정하고 할당하는 방법이다.

24. 명시적 선언과 묵시적 선언의 차이점은 무엇인가?

  1. 명시적 선언은 컴파일 시점에 이루어지지만, 묵시적 선언은 프로그램 수행 시점에 이루어짐
  2. 명시적 선언은 선언문을 이용하지만, 묵시적 선언은 대입문에 처음 사용된 이름으로 이루어짐
  3. 명시적 선언은 변수의 타입을 바인딩하지 않지만, 묵시적 선언은 타입을 바인딩함
  4. 명시적 선언은 항상 정적 바인딩을 사용하지만, 묵시적 선언은 동적 바인딩을 사용함

정답: 2. 명시적 선언은 선언문을 이용하지만, 묵시적 선언은 대입문에 처음 사용된 이름으로 이루어짐
해설: 명시적 선언은 선언문을 통해 변수를 정의하는 반면, 묵시적 선언은 변수가 프로그램에서 처음 사용될 때 자동으로 선언된다.

25. Python에서 변수

의 타입 바인딩은 어떻게 이루어지는가?

  1. 컴파일 시점에 정적으로 결정됨
  2. 프로그램 수행 시점에 동적으로 결정됨
  3. 로드 시점에 결정됨
  4. 프로그램 링크 시점에 결정됨

정답: 2. 프로그램 수행 시점에 동적으로 결정됨
해설: Python은 동적 타입 언어로서, 변수의 타입은 프로그램 수행 시점에 동적으로 결정된다.

26. 정적 바인딩과 동적 바인딩의 주요 차이점은 무엇인가?

  1. 바인딩 시점의 차이
  2. 변수의 타입의 차이
  3. 메모리 할당 방식의 차이
  4. 프로그래밍 언어의 종류의 차이

정답: 1. 바인딩 시점의 차이
해설: 정적 바인딩은 프로그램 수행 이전에 모든 바인딩이 완료되는 반면, 동적 바인딩은 프로그램 수행 중에 바인딩이 이루어진다.

27. 변수의 주소 바인딩이란 무엇인가?

  1. 변수의 타입을 결정하는 과정
  2. 변수가 사용할 메모리의 위치를 결정하는 과정
  3. 변수의 값이 결정되는 과정
  4. 변수의 이름을 결정하는 과정

정답: 2. 변수가 사용할 메모리의 위치를 결정하는 과정
해설: 주소 바인딩은 변수가 메모리 상에서 사용할 위치를 결정하는 과정을 의미한다.

28. 프로그램의 동적 세그먼트는 무엇을 포함하는가?

  1. 코드와 정적 데이터
  2. 스택과 힙
  3. 변수의 이름과 타입
  4. 함수와 클래스

정답: 2. 스택과 힙
해설: 프로그램의 동적 세그먼트는 스택과 힙을 포함하며, 이는 동적 변수 할당과 관련이 있다.

29. Fortran 언어에서 변수명의 시작 알파벳에 따라 타입이 결정되는 것은 어떤 종류의 바인딩인가?

  1. 정적 바인딩
  2. 동적 바인딩
  3. 묵시적 선언
  4. 명시적 선언

정답: 3. 묵시적 선언
해설: Fortran 언어에서는 변수명의 시작 알파벳에 따라 타입이 자동으로 결정되는 묵시적 선언 방식을 사용한다.

30. 변수의 수명이란 무엇인가?

  1. 변수가 프로그램 내에서 사용되는 기간
  2. 변수가 메모리에 할당되어 있는 기간
  3. 변수의 타입이 유지되는 기간
  4. 변수가 메모리에서 해제되기까지의 기간

정답: 2. 변수가 메모리에 할당되어 있는 기간
해설: 변수의 수명은 변수가 메모리에 할당되어 값을 저장할 수 있는 기간을 의미한다.

반응형