Visual Basic의 수명
업데이트: 2007년 11월
선언 요소의 수명은 선언 요소를 사용할 수 있는 기간을 의미합니다. 변수는 수명이 있는 유일한 요소입니다. 이를 위해 컴파일러에서는 프로시저 매개 변수와 함수 반환 값을 특별한 경우의 변수로 간주합니다. 변수의 수명은 변수가 값을 가질 수 있는 기간을 나타냅니다. 이 기간 동안 변수의 값은 변할 수 있지만 항상 어떤 값을 가집니다.
여러 가지 수명
프로시저 밖의 모듈 수준에서 선언된 멤버 변수는 일반적으로 해당 변수가 선언된 요소와 수명이 동일합니다. 클래스나 구조체에서 선언된 비공유 변수는 해당 변수가 선언된 클래스나 구조체의 각 인스턴스에 대한 개별적인 복사본으로 존재합니다. 따라서 각 변수와 인스턴스는 수명이 동일합니다. 그러나, Shared 변수는 응용 프로그램이 실행되는 전체 기간 동안 지속되는 하나의 수명만을 가집니다.
프로시저 내에 선언된 지역 변수는 지역 변수가 선언된 프로시저가 실행되는 동안에만 존재합니다. 이는 해당 프로시저의 매개 변수와 모든 함수 반환 값에도 적용됩니다. 그러나, 이 프로시저가 다른 프로시저를 호출하는 경우 호출된 프로시저가 실행되는 동안 지역 변수 값은 유지됩니다.
수명의 시작
지역 변수의 수명은 지역 변수가 선언된 프로시저로 제어가 전달될 때 시작됩니다. 모든 지역 변수는 프로시저가 실행되기 시작하는 즉시 해당 데이터 형식의 기본값으로 초기화됩니다. 프로시저가 초기 값을 지정하는 Dim 문을 만나면 코드에서 이미 다른 값을 해당 변수에 할당했을 경우에도 해당 값에 해당 변수를 설정합니다.
구조체 변수의 각 멤버는 마치 개별적인 변수인 것처럼 초기화됩니다. 이와 비슷하게 배열 변수의 각 요소도 개별적으로 초기화됩니다.
프로시저 내의 블록에 선언된 For 루프 등의 변수는 프로시저가 실행되기 시작할 때 초기화됩니다. 이러한 초기화는 코드에서 해당 블록을 실행하는지 여부에 관계없이 적용됩니다.
수명의 종료
프로시저가 종료되면 해당 지역 변수의 값이 소실되고 Visual Basic에서는 이 지역 변수에서 사용하던 메모리를 회수합니다. 다음에 프로시저를 호출하면 모든 지역 변수가 다시 만들어지고 초기화됩니다.
클래스나 구조체의 인스턴스가 종료되면 비공유 변수의 메모리 및 값이 소실됩니다. 클래스 또는 구조체의 새 인스턴스는 각각 해당 비공유 변수를 만들고 초기화합니다. Shared 변수는 응용 프로그램 실행이 중지될 때까지 보존됩니다.
수명의 연장
Static 키워드를 사용하여 지역 변수를 선언한 경우 지역 변수의 수명은 해당 프로시저의 실행 시간보다 깁니다. 다음 표에서는 프로시저 선언에 따라 Static 변수의 수명이 결정되는 방법을 보여 줍니다.
프로시저 위치 및 공유 여부 |
Static 변수의 수명 시작 |
Static 변수의 수명 종료 |
---|---|---|
모듈. 기본적으로 shared |
프로시저가 처음 호출될 때 |
응용 프로그램의 실행이 중지될 때 |
클래스 또는 구조체. Shared(프로시저는 인스턴스 멤버가 아님) |
프로시저가 특정 인스턴스나 클래스 또는 구조체 이름에 대해 처음 호출될 때 |
응용 프로그램의 실행이 중지될 때 |
클래스 또는 구조체의 인스턴스. Shared 아님(프로시저는 인스턴스 멤버임) |
프로시저가 특정 인스턴스에 대해 처음 호출될 때 |
인스턴스가 GC(가비지 수집)를 위해 해제될 때 |