비주얼 베이직에서 프로시저 내의 변수는 호출이 끝나면 일반적으로 값을 잃어버립니다. Static 키워드는 변수가 프로시저 호출 간에 값을 유지하도록 합니다.
문제의 역사:
클래식 비주얼 베이직 (VB6) 및 VB.NET에서 Static은 종종 클래스 또는 모듈 필드를 사용하지 않고 카운터와 플래그를 생성하는 데 사용되었습니다.
문제:
개발자는 일반적인 로컬 변수를 사용하여 "지속성"을 기대할 수 있지만, 이 변수들은 매 호출마다 초기화됩니다. 반면에 정적 변수의 선택된 위치(프로시저 본문 또는 코드 블록)가 잘못될 수 있습니다.
해결책:
프로시저 내에서 Static으로 변수를 선언하십시오. 이 변수는 프로시저의 첫 번째 호출 시 한 번 초기화되며, 호출 간에 값을 유지합니다.
코드 예:
Sub CountCalls() Static counter As Integer = 0 counter += 1 Console.WriteLine($"호출 번호: {counter}") End Sub ' 호출은 다른 값을 생성합니다 CountCalls() ' 1 CountCalls() ' 2 CountCalls() ' 3
주요 특징:
Static 변수는 프로시저의 유효 범위 내에서만 존재하지만 호출 간에 값을 유지합니다.프로시저의 Static과 Shared 수정자가 있는 클래스 필드의 차이점은 무엇입니까?
Static 변수는 해당 프로시저에서만 작용하며, 각 메서드 인스턴스는 독립적인 정적 변수를 가집니다. Shared 클래스 필드는 클래스 전체에 대해 하나입니다.
For 또는 If 블록 내에서 Static 변수를 선언할 수 있습니까?
아니요, Static 변수는 프로시저의 최상위 수준에서만 선언 가능하며 중첩된 블록(For, If) 내에서는 허용되지 않습니다.
여러 스레드에서 Static가 있는 프로시저를 호출하면 어떤 일이 발생합니까?
VB.NET 버전에서 Static 변수의 유효 범위는 각 스레드에 연결되어 있어 경쟁 조건이 발생하고 다중 스레드 호출 시 예상치 못한 값이 발생할 수 있습니다.
단축키 입력에 대한 사용자 반응을 계산하는 프로시저에서 Static을 사용해 트리거 시간을 저장하지만 여러 사용자의 동시 입력을 고려하지 않습니다(예: 웹 애플리케이션이나 다중 스레드 창).
장점:
단점:
Static은 특정 스레드에서만 동기적으로 호출되는 유틸리티 메서드의 내부 호출 카운터를 저장하는 데 사용됩니다.
장점:
단점: