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

변수의 영역 , 정적 영역, 동적 영역, 지역 변수, 정적 영역 규칙 - 방통대 프로그래밍 언어론 기말 고사 기출 유사 문제 풀이

by Renechoi 2023. 12. 8.

변수의 영역

  1. 프로그램에서 변수를 사용할 수 있는 범위를 변수의 영역이라고 함
  2. 즉 변수는 자신의 영역 안에서만 값을 대입하거나 값을 읽어올 수 있음
  3. 영역의 시작은 변수가 선언되는 곳임
  4. 수명의 시작은 동적 바인딩의 경우 변수 선언 위치이며 정적 바인딩의 경우 프로그램이 수행되는 시점임
  5. 블록은 프로그램 문장들의 묶음
  6. 블록은 영역을 구분해주는 단위
  7. 블록 안에서 변수 선언이 가능하며 영역의 끝은 블록이 끝나는 지점임
  8. Algol 60 -> 복합문 (beigin ~ end)
  9. C, C++, Java -> 복합문 ({~}),함수, 클래스
  10. Pascal -> 복합문 (begin ~ end)는 블록이 아님
  11. 지역 변수: 블록 안에서 선언된 변수
  12. 비지역 변수: 블록 밖에서 선언되었지만 블록 안에서 사용될 수 있는 변수
  13. 지역변수와 비지역변수는 상대적인 개념
  14. 참조 환경: 프로그램의 한 위치에서 사용할 수 있는 모든 변수의 모음
  15. 특정 위치의 참조 환경은 해당 위치의 모든 지역변수와 모든 비지역변수로 구성
  16. 영역 규칙이란 변수의 참조 위치를 결정하는 방법으로 특히 비지역변수의 위치를 어떻게 결정할 것인지를 주로 다룸
  17. 현재 블록에서 선언되지 않고 사용하려는 변수를 자유변수라고 하는데, 자유변수는 비지역변수일 수도 있고 오류일 수도 있음
  18. 비지역변수라면 어디에서 선언된 변수인지 영역 규칙에 따라 참조 위치를 결정해야 함
  19. 영역 규칙으로 찾을 수 없는 경우에는 선언되지 않은 변수를 사용하려 한 경우가 되어 오류로 판단
  20. 정적 영역 규칙은 블록들의 정적 내포 관계를 이용하여 변수의 참조 위치를 찾는 방법
  21. 정적 내포 관계란 블록들의 포함 관계를 문맥적으로 판단하는 것으로, main 안에 sub1이 포함되고, sub1 안에 sub2가 포함되는 것
  22. 정적 영역 규칙을 사전식 영역 규칙이라고도 함
  23. 어떤 블록의 정적 조상이란 그 블록을 문맥적으로 포함하는 모든 블록들
  24. 어떤 블록의 정적 부모란 그 블록에 가장 가까운 정적 조상을 의미
  25. 정적 영역 규칙을 적용하는 방법 : 사용하려는 변수의 이름에 대한 선언이 현재 블록 안에 존재 -> 지역 변수
  26. 자유 변수라면 현재 블록의 정적 부모에 대해 1) 자유변수 이름에 대한 선언이 존재하면 비지역변수, 2) 선언이 없으면 그 블록의 정적 부모에 대해 반복
  27. 가장 바깥 영역가지 선언을 찾지 못하는 경우 오류
  28. 비지역변수가 같은 이름의 지역변수 때문에 보이지 않는 영역
  29. 동적 영역 규칙은 블록들의 동적 내포 관계를 이용하여 변수의 참조 위치를 찾는 방법
  30. 동적 내포 관계란 블록들의 포함 관계를 서브프로그램의 호출 관계로 판단하는 것
  31. 동적 내포 관계는 프로그램 수행 시점에서만 판단 가능
  32. 동적 영역 규칙 적용 방법 : 1) 사용하려는 변수의 이름에 대한 선언이 현재 블록안에 존재하면 지역 변수 2) 자유변수라면 현재 블록을 호출한 블록에 대해 자유 변수 이름에 대한 선언이 존재하면 비지역 변수, 선언이 없으면 그 블록을 호출한 블록에 대해 반복 3) 최종 호출자 영역까지 선언을 못찾으면 오류
  33. 정적 영역 규칙은 컴파일 시점에 변수의 참조 위치를 결정할 수 있어서 정적 타입 검사가 가능하고 동적 영역 규칙보다 수행 속도가 빠름. 대부분의 언어 Algol 60, Pascal, C/C++, Java, Python 등 대부분의 언어에서 채택
  34. 동적 영역 규칙은 수행 시점에 변수의 참조 위치를 결정할 수 있어서 정적 타입 검사가 불가능. 수행시 자유변수의 오류 여부를 매번 확인해야 하고 참조할 비지역변수를 찾더라도 매번 타입 검사를 해야 하는 등 정적 영역 규칙보다 수행 속도가 느림. LISP 등 인터프리터 언어.
  35. 전역변수는 어던 블록에도 포함되지 않는 곳에서 선언된 변수로 영역은 프로그램 전체
  36. 전역변수는 어떤 블록에서도 지역 변수가 될 수 없고, 모든 블록에서 비지역변수가 됨
  37. 어떤 블록에서 전역변수명과 동일한 이름으로 지역변수를 선언하는 경우, 해당 블록에서 전역변수는 보이지 않게 됨. 하지만 영역 연산자를 이용하면 영역 구멍세더도 전역변수를 볼 수 있음.
  38. C++의 경우 영역 연산자인 ::을 전역변수 앞에 붙이면 영역 구멍이라 하더라도 전역 변수 사용이 가능
  39. 이름 공간이란 관련성이 높은 변수와 함수를 하나의 묶음으로 관리하는 영역으로, 변수명처럼 영역 자체의 이름을 가짐
  40. 이름 공간 내의 변수/함수를 이름 공간 밖에서 사용하는 방법: 1) 이름 공간의 이름과 영역 연산자 ::를 이용 2) 예약어 using을 이용
  41. 이름 공간의 변수와 지역변수가 중첩된 경우 영역 연산자를 이용해서 해결할 수 있다.

문제

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

  1. 프로그램의 모든 부분에서 사용 가능한 변수
  2. 변수가 선언된 블록 내에서만 사용 가능한 변수
  3. 프로그램 수행 시점에서만 사용 가능한 변수
  4. 변수가 사용하는 메모리 위치

정답: 2
해설: 변수의 영역은 변수가 선언된 블록 내에서만 그 변수를 사용할 수 있는 범위를 의미한다.

2. 정적 영역 규칙과 동적 영역 규칙의 차이점은 무엇인가?

  1. 변수의 참조 위치 결정 시점
  2. 변수의 데이터 타입 결정 방법
  3. 변수 선언 위치
  4. 변수의 수명 기간

정답: 1
해설: 정적 영역 규칙은 컴파일 시점에, 동적 영역 규칙은 실행 시점에 변수의 참조 위치를 결정한다.

3. 전역 변수의 특징은 무엇인가?

  1. 하나의 블록 내에서만 사용 가능
  2. 모든 블록에서 사용 가능
  3. 프로그램 수행 시점에서만 생성
  4. 한 프로그램 내에서 한 번만 선언 가능

정답: 2
해설: 전역 변수는 프로그램의 어떤 블록에서도 접근할 수 있으며, 영역은 프로그램 전체이다.

4. 자유 변수를 참조하는 경우, 정적 영역 규칙에 따라 변수의 참조 위치를 찾는 방법은 무엇인가?

  1. 현재 블록의 지역 변수 중에서 찾음
  2. 현재 블록의 정적 부모 중에서 찾음
  3. 프로그램의 전역 변수 중에서 찾음
  4. 현재 블록을 호출한 블록 중에서 찾음

정답: 2
해설: 자유 변수의 경우, 정적 영역 규칙에 따라 현재 블록의 정적 부모 또는 그 이상의 블록 중에서 변수의 참조 위치를 찾는다.

5. 변수의 수명이 시작되는 시점은 언제인가?

  1. 변수가 선언되는 시점
  2. 프로그램이 실행되는 시점
  3. 변수가 처음 사용되는 시점
  4. 변수가 메모리에 할당되는 시점

정답: 1
해설: 변수의 수명은 변수가 선언되는 시점에서 시작한다.

6. 이름 공간을 사용하는 목적은 무엇인가?

  1. 변수의 메모리 할당을 최적화하기 위해
  2. 변수와 함수를 논리적으로 그룹화하기 위해
  3. 변수의 실행 속도를 높이기 위해
  4. 변수의 수명을 연장하기 위해

정답: 2
해설: 이름 공간은 관련성이 높은 변수와 함수를 하나의 묶음으로 관리하기 위해 사용된다.

7. 지역 변수와 전역 변수의 주요 차이점은 무엇인가?

  1. 변수의 메모리 할당 크기
  2. 변수의 데이터 타입
  3. 변수가 사용할 수 있는 영역
  4. 변수의 실행 속도

정답: 3
해설: 지역 변수는 선언된 블록 내에서만 사용할 수 있지만, 전역 변수는 프로그램의 모든 부분에서 사용할 수 있다.

8. 영역 규칙이란 무엇을 의미하는가?

  1. 변수의 데이터 타입을 결정하는 규칙
  2. 변수의 메모리 위치를 결정하는 규칙
  3. 변수의 참조 위치를 결정하는 규칙
  4. 변수의 수명을 결정하는 규칙

정답: 3
해설: 영역 규칙은 변수의 참조 위치를 결정하는 방법을 의미한다.

9. Algol 60, Pascal, C/C++, Java, Python 등 대부분의 언어가 채택하는 영역 규칙은 무엇인가?

  1. 동적 영역 규칙
  2. 정적 영역 규칙
  3. 유연 영역 규칙
  4. 엄격 영역 규칙

정답: 2
해설: Algol 60, Pascal, C/C++, Java, Python 등 대부분의 언어는 정적 영역 규칙을 채택한다.

10. C++에서 영역 연산자(::)의 사용 목적은 무엇인가?

1. 전역 변수를 지역 변수로 변환하기 위해
2. 지역 변수를 전역 변수로 변환하기 위해
3. 영역 구멍을 통해 전역 변수에 접근하기 위해
4. 지역 변수의 메모리 할당을 변경하기 위해
**정답:** 3
**해설:** C++에서 영역 연산자(::)는 영역 구멍 상황에서도 전역 변수에 접근할 수 있게 해준다.

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

1. 변수의 참조 위치 결정 시점
2. 변수의 데이터 타입 결정 방법
3. 변수의 메모리 할당 방식
4. 변수의 수명 기간
**정답:** 1
**해설:** 동적 바인딩은 실행 시점에, 정적 바인딩은 컴파일 시점에 변수의 참조 위치를 결정한다.

12. C++에서 이름 공간을 사용하는 목적은 무엇인가?

1. 변수의 메모리 할당을 최적화하기 위해
2. 변수와 함수를 논리적으로 그룹화하기 위해
3. 변수의 실행 속도를 높이기 위해
4. 변수의 수명을 연장하기 위해
**정답:** 2
**해설:** C++에서 이름 공간은 관련성이 높은 변수와 함수를 논리적으로 그룹화하여 관리하기 위해 사용된다.

13. Algol 60의 복합문(begin ~ end)의 특징은 무엇인가?

1. 블록이 아니다.
2. 지역 변수만 선언 가능하다.
3. 전역 변수만 선언 가능하다.
4. 블록으로 간주되어 영역을 형성한다.
**정답:** 1
**해설:** Algol 60의 복합문(begin ~ end)은 블록으로 간주되지 않는다.

14. LISP 언어에서 사용되는 영역 규칙은 무엇인가?

1. 정적 영역 규칙
2. 동적 영역 규칙
3. 유연 영역 규칙
4. 엄격 영역 규칙
**정답:** 2
**해설:** LISP 언어는 동적 영역 규칙을 사용한다.

15. C++에서 전역 변수와 동일한 이름의 지역 변수를 선언한 경우, 전역 변수에 접근하기 위해 사용하는 연산자는 무엇인가?

1. #
2. ::
3. ->
4. .
**정답:** 2
**해설:** C++에서는 영역 연산자(::)를 사용하여 영역 구멍 상황에서도 전역 변수에 접근할 수 있다.

16. 이름 공간 밖에서 이름 공간 내의 변수나 함수를 사용하기 위한 방법은 무엇인가?

1. 이름 공간의 이름과 영역 연산자(::)를 이용
2. 예약어 `using`을 이용
3. 함수 호출을 통해
4. 직접 접근
**정답:** 1, 2
**해설:** 이름 공간 밖에서 이름 공간 내의 변수나 함수를 사용하기 위해서는 이름 공간의 이름과 영역 연산자(::)를 이용하거나 예약어 `using`을 이용할 수 있다.

17. 블록의 영역이 끝나는 지점은 어디인가?

1. 변수가 선언되는 위치
2. 블록이 시작하는 위치
3. 블록이 끝나는 지점
4. 프로그램이 종료되는 지점
**정답:** 3
**해설:** 블록의 영역은 블록이 끝나는 지점에서 종료된다.

18. 정적 내포 관계를 설명하는 예시는 무엇인가?

1. main 안에 sub1이 포함되고, sub1 안에 sub2가 포함되는 것
2. 함수가 다른 함수를 호출하는 것
3. 변수가 다른 변수를 참조하는 것
4. 클래스가 다른 클래스를 상속받는 것
**정답:** 1
**해설:** 정적 내포 관계는 블록들의 포함 관계를 문맥적으로 판단하는 것으로, main 안에 sub1이 포함되고, sub1 안에 sub2가 포함되는 것을 예로 들 수 있다.

19. 변수의 영역 규칙에서 '참조 환경'이 의미하는 바는 무엇인가?

1. 변수가 선언된 위치
2. 변수가 사용되는 모든 위치
3. 프로그램의 한 위치에서 사용할 수 있는 모든 변수의 모음
4. 변수가 저장되는 메모리 위치
**정답:** 3
**해설:** 참조 환경은 프로그램의 한 위치에서 사용할 수 있는 모든 변수의 모음을 의미한다.

20. 자유 변수를 찾을 때 정적 영역 규칙을 적용하는 과정은 무엇인가?

1. 자유 변수 이름에 대한 선언이 현재 블록 안에 존재하는지 확인
2. 존재하지 않는 경우, 현재 블록의 정적 부모에 대해 자유 변수 이름에 대한 선언이 존재하는지 확인
3. 가장 바깥 영역까지 선언을 찾지 못하는 경우 오류로 판단
4. 모든 블록을 순차적으로 검사
**정답:** 1, 2, 3
**해설:** 자유 변수를 찾을 때 정적 영역 규칙은 현재 블록에서부터 시작하여 필요한 경우 상위 블록으로 올라가며 변수의 선언을 찾는다.

21. 복합문(begin ~ end)의 영역 규칙은 어떠한가?

  1. 지역 변수만 선언 가능하다
  2. 전역 변수만 선언 가능하다
  3. 블록으로 간주되어 영역을 형성하지 않는다
  4. 블록으로 간주되어 영역을 형성한다

정답: 3
해설: 복합문(begin ~ end)은 Algol 60에서 사용되며, 이는 블록으로 간주되지 않아 영역을 형성하지 않는다.

22. 동적 영역 규칙을 적용하는 방법 중 올바른 것은 무엇인가?

  1. 현재 블록에서 변수의 선언을 찾는다
  2. 현재 블록을 호출한 블록에서 변수의 선언을 찾는다
  3. 가장 바깥 영역까지 변수의 선언을 찾는다
  4. 모든 블록을 순차적으로 검사한다

정답: 2
해설: 동적 영역 규칙은 현재 블록을 호출한 블록에서 변수의 선언을 찾는 방법이다.

23. 이름 공간(namespace)의 주요 목적은 무엇인가?

  1. 변수의 메모리 할당을 최적화하기 위해
  2. 변수와 함수를 논리적으로 그룹화하기 위해
  3. 변수의 실행 속도를 높이기 위해
  4. 변수의 수명을 연장하기 위해

정답: 2
해설: 이름 공간(namespace)은 관련성이 높은 변수와 함수를 논리적으로 그룹화하여 관리하기 위해 사용된다.

24. 전역 변수와 동일한 이름의 지역 변수를 선언한 경우, 전역 변수에 접근하는 방법은 무엇인가?

  1. #
  2. ::
  3. ->
  4. .

정답: 2
해설: C++에서는 영역 연산자(::)를 사용하여 동일한 이름의 지역 변수가 선언되어 있어도 전역 변수에 접근할 수 있다.

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

  1. 변수가 메모리에 할당되어 있는 기간
  2. 변수가 선언된 후부터 프로그램이 종료될 때까지의 기간
  3. 변수가 처음 사용된 시점부터 마지막으로 사용된 시점까지의 기간
  4. 변수가 선언된 블록이 실행되는 기간

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

26. 블록 내에서 선언된 지역 변수의 영역은 어디까지인가?

  1. 해당 블록이 끝나는 지점까지

  2. 프로그램이 종료되는 지점까지

  3. 다음 변수가 선언되는 지점까지

  4. 해당

    블록이 시작하는 지점까지

정답: 1
해설: 지역 변수의 영역은 해당 변수가 선언된 블록 내에서만 유효하며, 블록이 끝나는 지점까지이다.

27. C++에서 이름 공간을 사용하는 이유는 무엇인가?

  1. 변수의 메모리 할당을 최적화하기 위해
  2. 변수와 함수를 논리적으로 그룹화하기 위해
  3. 변수의 실행 속도를 높이기 위해
  4. 변수의 수명을 연장하기 위해

정답: 2
해설: C++에서 이름 공간은 관련성이 높은 변수와 함수를 논리적으로 그룹화하여 관리하기 위해 사용된다.

28. 변수의 영역 규칙에서 '참조 환경'이 의미하는 바는 무엇인가?

  1. 변수가 선언된 위치
  2. 변수가 사용되는 모든 위치
  3. 프로그램의 한 위치에서 사용할 수 있는 모든 변수의 모음
  4. 변수가 저장되는 메모리 위치

정답: 3
해설: 참조 환경은 프로그램의 한 위치에서 사용할 수 있는 모든 변수의 모음을 의미한다.

29. 정적 내포 관계를 설명하는 예시는 무엇인가?

  1. main 안에 sub1이 포함되고, sub1 안에 sub2가 포함되는 것
  2. 함수가 다른 함수를 호출하는 것
  3. 변수가 다른 변수를 참조하는 것
  4. 클래스가 다른 클래스를 상속받는 것

정답: 1
해설: 정적 내포 관계는 블록들의 포함 관계를 문맥적으로 판단하는 것으로, main 안에 sub1이 포함되고, sub1 안에 sub2가 포함되는 것을 예로 들 수 있다.

30. 이름 공간 밖에서 이름 공간 내의 변수나 함수를 사용하기 위한 방법은 무엇인가?

  1. 이름 공간의 이름과 영역 연산자(::)를 이용
  2. 예약어 using을 이용
  3. 함수 호출을 통해
  4. 직접 접근

정답: 1, 2
해설: 이름 공간 밖에서 이름 공간 내의 변수나 함수를 사용하기 위해서는 이름 공간의 이름과 영역 연산자(::)를 이용하거나 예약어 using을 이용할 수 있다.

반응형