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 변수를 선언하였고, 매 호출 시 "초기화"될 것이라고 생각했습니다. 결과적으로 반복 호출 후 합계가 증가하여 잘못된 결과를 낳았습니다.