프로그래밍소프트웨어 엔지니어 (VB 개발자)

Visual Basic에서 변수의 범위(scope)는 어떻게 작동하며, 프로그램의 다양한 부분에서 변수 접근성 문제를 피하기 위해 어떻게 해야 합니까?

Hintsage AI 어시스턴트로 면접 통과

답변

Visual Basic에서 변수의 범위는 선언 위치에 따라 결정됩니다: 절차 내(지역 변수), 클래스/모듈 수준(클래스 또는 모듈 변수), 또는 전역적으로(별도 파일 내).

  • Dim 절차 내 — 이 절차 내에서만 접근 가능합니다.
  • Dim 클래스 또는 모듈 수준에서 — 클래스/모듈의 모든 절차에서 접근 가능합니다.
  • Public, Private, Friend 사용 — 다른 클래스/모듈에서의 접근 제한을 설정합니다.

예시:

Module Module1 Dim moduleVar As Integer = 5 Sub Main() Dim localVar As Integer = 10 Console.WriteLine(moduleVar) ' 접근 가능 Console.WriteLine(localVar) ' 접근 가능 End Sub Sub OtherSub() Console.WriteLine(moduleVar) ' 접근 가능 Console.WriteLine(localVar) ' 오류! End Sub End Module

함정 질문

Static 키워드로 선언된 변수는 절차 내에서 어떤 범위를 가집니까?

답변:

절차 내에서 Static 키워드로 선언된 변수는 그 절차 내에서만 접근 가능하지만, 절차 호출 간에 값이 저장됩니다.

예시:

Sub Counter() Static count As Integer count = count + 1 Console.WriteLine(count) End Sub ' Counter를 호출할 때마다 count가 증가함

주제에 대한 지식 부족으로 인한 실제 오류 예시


이야기

프로젝트 내에서 Dim x As Boolean 플래그 변수가 For 루프 내부에서 선언되었고, 새로운 반복 시 "리셋"될 것이라고 기대했습니다 (일부 다른 언어처럼). 하지만 루프를 빠져나온 후에도 변수가 접근 가능하게 남아, 두 번째 절차 호출 후 예측할 수 없는 동작을 초래했습니다.


이야기

한 프로그래머가 모듈 내에서 공용 변수를 선언하였고, 같은 이름을 가진 다른 모듈에 의해 우연히 재정의되어 프로그램의 다양한 부분에서 치명적인 오류를 초래했습니다. 이는 디버깅을 복잡하게 만들었고 아무도 원인을 이해할 수 없었습니다.


이야기

한 학생이 한 서브프로그램에서 합계를 누적하기 위해 Static 변수를 선언하였고, 매 호출 시 "초기화"될 것이라고 생각했습니다. 결과적으로 반복 호출 후 합계가 증가하여 잘못된 결과를 낳았습니다.