티스토리 뷰

이전 2개의 글을 통해서 변수,상수와 배열에 대해서 설명을 드렸습니다. 변수는 변하는 특정 값을 저장하기 위한 메모리 저장소이고, 상수는 변하지 않는 값에 대한 메모리 저장소입니다. 그리고 배열은 변수를 여러개 이어놓은것이라고 생각을 하면 됩니다.


변수, 상수, 배열에 대해서 아직 이해가 부족하시다면 아래의 링크를 참조하시기 바랍니다.



이번 글에서는 변수를 사용할 수 있는 범위에 대해서 설명을 드리겠습니다. 일단 변수는 지역변수와 전역변수로 구분을 할 수 있습니다. 지역변수와 전역변수의 특징을 구분하면 아래와 같습니다.


1. 지역 변수


지역 변수는 함수 또는 특정 블록내에서 선언이 된 변수를 말합니다. 사용에 대한 범위는 선언이 된 블록 내에서만 사용을 할 수 있습니다. 지역변수는 특정 블록이 시작이 될 때 메모리를 참조하게 되고, 블록이 종료가 되면 소멸이 되는 특징을 가지고 있습니다. 따라서 함수 혹은 블록이 호출될 때 마다 초기화 되었다가, 소멸되는 걸 반복하게 됩니다.


이는 매우 비효율적이게 들릴지 모르겠지만, 버그를 막아주고, 가독성을 쉽게 해주는 장점을 가지고 있습니다. 


2. 전역 변수


전역 변수는 함수의 외부에서 선언이 된 변수를 말합니다. 모든 코드에서 같이 사용할 수 있어 사용에 편리합니다. 그리고 프로그램이 시작이 되면 메모리에 참조된 뒤 프로그램이 종료될 때 까지 소멸되지 않습니다. 전역 변수가 아주 좋아 보이지만 전역 변수를 무리하게 사용하면 프로그램에 오류를 만들 수 있습니다. 그리고 그 오류를 찾는데(디버깅)에 많은 시간이 걸리기도 합니다. 


지역 변수와 전역 변수는 사용해야 하는 경우의 수가 다르기는 하지만, 왠만하면 지역 변수를 사용하는걸 권장합니다. 그 이유는 전역 변수가 단점을 생각보다 많이 가지고 있기 때문입니다. 


그럼 코드를 통해서 지역변수와 전역변수의 사용예를 알아보도록 하겠습니다. 


Option Explicit


Dim 전역변수 As String


Sub 변수테스트()


    Dim 지역변수 As String

    지역변수 = "지역변수 입니다."

    전역변수 = "전역변수 입니다."    

    

    MsgBox 지역변수

    MsgBox 전역변수


End Sub


Sub 변수테스트2()

        

    지역변수 = "지역변수 입니다."

    전역변수 = "전역변수 입니다."

        

    MsgBox 지역변수

    MsgBox 전역변수


End Sub


코드에서 Option Explicit라는 용어가 처음으로 나왔습니다. Option Explicit는 명시적 선언을 이 코드에서 사용하겠다라고 정의하는 내용입니다. 이말인 즉슨 코드내에서 사용하는 변수는 모두 Dim을 기반으로 선언을 하겠다는 말입니다. Option Explicit가 선언되어 있지 않으면 Dim을 통해서 변수를 선언하지 않아도 변수를 사용할 수 있습니다.


코드에서는 전역변수와 지역변수를 만들었습니다. 지역변수는 변수테스트()안에서 만들었고, 전역변수는 함수 밖에 만들었습니다. 변수테스트()를 실행하면 지역변수와 전역변수 모두 접근이 가능합니다. 메시지 창이 잘 뜨게 되네요.



하지만 변수테스트2()를 실행하게 되면 바로 에러가 나버립니다. 변수 테스트2에 지역변수가 선언이 되어 있지 않기 때문에 지역변수에 접근하려고 해서 에러가 나는것입니다. 



이렇듯 지역변수는 특정 지역(함수 혹은 블록)에서만 사용이 가능합니다. 전역변수는 코드내에서는 어디든 사용이 가능하구요.


Note: 지역 변수는 블록이 벗어나면 할당된 메모리를 초기화 한다고 하였습니다. 초기화를 하지 않고 동일 함수 혹은 지역 내에서 이전 값을 계속 참조해서 쓰고 싶다면 어떻게 해야 할까요? 정적 변수라는 것을 사용하면 됩니다. 


정적 변수의 선언 방법은 아래와 같습니다. Dim을 빼고 Static을 넣어주시면 됩니다. 


Static 변수 AS 데이터형


Static으로 지정을 하시면 이전에 사용했던 값을 버리지 않고 메모리에 계속 참조하고 있습니다. 지역변수의 값이 초기화되어 전역변수를 가야한다면 그때는 정적 변수를 한번 고려해 보시는것도 좋습니다. 


이글에서는 변수에 대한 사용 범위에 대해서 알아보았습니다.

이글이 도움이 되셨으면, 아래의 그림을 클릭해주세요.



댓글