프로그래밍VB.NET 중급 개발자

비주얼 베이직 프로시저에서 정적 변수를 초기화하는 메커니즘을 설명하십시오. Static 키워드를 어떻게 사용하며, 사용 시 주의할 점은 무엇입니까?

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

답변.

비주얼 베이직에서 프로시저 내의 변수는 호출이 끝나면 일반적으로 값을 잃어버립니다. 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 변수의 유효 범위는 각 스레드에 연결되어 있어 경쟁 조건이 발생하고 다중 스레드 호출 시 예상치 못한 값이 발생할 수 있습니다.

전형적인 오류 및 안티 패턴

  • 참조 형식(Reference Types)에서 Static을 사용하려고 시도하면서 모든 호출을 위한 공통 객체를 기대하는 것(각 Static에 대해 새 인스턴스가 생성됨).
  • 자주 호출되는 프로시저에서 Static 사용으로 인한 메모리 누적.

실제 사례

부정적인 사례

단축키 입력에 대한 사용자 반응을 계산하는 프로시저에서 Static을 사용해 트리거 시간을 저장하지만 여러 사용자의 동시 입력을 고려하지 않습니다(예: 웹 애플리케이션이나 다중 스레드 창).

장점:

  • 호출 카운터를 쉽게 구현할 수 있음.

단점:

  • 다중 스레드 시나리오에서 작동하지 않음.
  • 테스트하기 어려움.

긍정적인 사례

Static은 특정 스레드에서만 동기적으로 호출되는 유틸리티 메서드의 내부 호출 카운터를 저장하는 데 사용됩니다.

장점:

  • 전역 변수를 필요로 하지 않음.
  • 비공식적인 증가 상태에 잘 맞음.

단점:

  • 단일 프로시저의 범위로만 제한됨.