방법: 변수의 수명 늘리기
업데이트: 2007년 11월
일반적으로 변수는 해당 변수가 선언된 프로그래밍 요소가 소멸될 때 함께 소멸됩니다. 그러나 Static(Visual Basic) 키워드를 사용하여 변수를 선언하면 해당 변수를 포함하는 요소보다 수명을 길게 늘릴 수 있습니다.
자세한 내용은 Visual Basic의 수명을 참조하십시오.
변수의 수명을 해당 변수를 포함하는 요소보다 길게 늘리려면
변수가 프로시저 내에 선언된 지역 변수인 경우 변수를 선언하는 Dim 문(Visual Basic)에 Static 키워드를 추가합니다. 정적 변수의 수명은 해당 변수를 선언하는 프로시저가 들어 있는 클래스 또는 모듈의 수명과 같습니다.
지역 변수가 Shared(Visual Basic) 프로시저 내에 있는 경우 해당 프로시저 및 변수는 응용 프로그램이 실행되는 동안 계속 존재합니다. 이 경우에는 Static을 사용하지 마십시오.
변수가 프로시저 외부의 클래스 또는 구조체에 선언된 멤버 변수인 경우 변수를 선언하는 Dim에 Shared 키워드를 추가합니다. 공유 변수는 클래스 또는 구조체의 인스턴스와 연결되어 있지 않으므로 응용 프로그램이 실행되는 동안 계속 존재합니다. 멤버 변수에는 Static을 사용할 수 없습니다.
멤버 변수가 모듈에 선언된 경우 해당 변수는 항상 응용 프로그램이 실행되는 동안 계속 존재합니다. 이 경우에는 Shared를 사용하지 마십시오.
예제
다음 예제에서는 Static(Visual Basic) 키워드를 사용하여 변수를 선언합니다. Dim 문(Visual Basic)에서 Static과 같은 한정자를 사용하는 경우에는 Dim 키워드를 사용하지 않아도 됩니다.
Function runningTotal(ByVal num As Integer) As Integer
Static applesSold As Integer
applesSold = applesSold + num
Return applesSold
End Function
위 예제에서 변수 applesSold는 runningTotal 프로시저가 호출 코드로 돌아간 후에도 계속해서 존재합니다. 다음에 runningTotal이 호출될 때 applesSold는 이전에 계산된 값을 유지합니다.
Static를 사용하지 않고 applesSold를 선언한 경우에는 runningTotal을 호출할 때마다 이전의 누적 값이 보존되지 않습니다. 다음에 runningTotal이 호출될 때 applesSold가 다시 만들어지고 0으로 초기화되며 runningTotal은 단지 해당 프로시저가 호출될 때의 값을 반환합니다.
코드 컴파일
정적 지역 변수의 값을 선언의 일부로 초기화할 수 있습니다. 배열을 Static으로 선언하면 차수(차원 수), 각 차원의 길이 및 개별 요소의 값을 초기화할 수 있습니다.
동일한 이름의 정적 변수
둘 이상의 프로시저에서 이름이 같은 정적 변수를 선언할 수 있습니다. 이 경우 Visual Basic 컴파일러에서는 각 변수를 개별 요소로 간주합니다. 따라서 그 중 한 변수를 초기화하더라도 다른 변수 값에는 영향을 주지 않습니다. 이것은 일련의 오버로드로 프로시저를 정의하고 각 오버로드에 이름이 같은 정적 변수를 선언하는 경우에도 마찬가지입니다.
정적 변수를 포함하는 요소
클래스에서, 즉 해당 클래스의 프로시저 내에서 정적 지역 변수를 선언할 수 있습니다. 그러나 구조체에서는 정적 지역 변수를 해당 구조체에 있는 프로시저의 구조체 멤버나 지역 변수로 선언할 수 없습니다.
보안
위 예제의 모듈 수준에서 applesSold를 선언하여 같은 수명을 얻을 수 있습니다. 그러나 이 방법으로 변수의 범위를 변경하면 프로시저가 더 이상 변수에 단독으로 액세스할 수 없게 됩니다. 이 상태에서는 다른 프로시저가 applesSold에 액세스하여 값을 변경할 수 있기 때문에 누계를 신뢰할 수 없고 코드 관리가 더욱 어려워질 수 있습니다.