전역 변수란 무엇인가?
전역 변수(global variable)는 함수 외부에서 선언되어, 함수 내부에서도 사용할 수 있는 변수를 의미합니다.
예제
def func():
print(a)
a = 10
func()
출력 결과
10
위 예제에서 변수 a는 함수 외부에서 선언되었기 때문에 전역 변수입니다. 따라서 함수 내부에서도 접근할 수 있으며, 변수 a의 유효 범위(scope)는 전역(global)이 됩니다.
함수 내부에 같은 이름의 변수가 있을 때는 어떻게 될까?
그렇다면 함수 내부에 전역 변수와 같은 이름을 가진 변수를 새로 선언하면 어떻게 될까요?
이 경우 함수 내부에서 선언된 변수는 해당 함수만의 지역 변수(local variable)로 취급됩니다. 즉, 그 변수의 유효 범위는 함수 내부로 한정되며, 함수 밖에서는 여전히 원래의 전역 변수 값이 유지됩니다.
다음 예제를 통해 더 쉽게 이해할 수 있습니다.
예제
a = 10
def func():
a = 5
print("Inside function:", a)
func()
print("Outside function:", a)
출력 결과
Inside function: 5
Outside function: 10
위 예제에서 a는 값이 10인 전역 변수입니다. 이후 func()가 호출되면, 함수 내부에는 값이 5인 또 다른 변수 a가 선언됩니다. 하지만 이 변수의 유효 범위는 오직 함수 내부로 제한됩니다.
따라서 나중에 함수 외부에서 a의 값을 출력하면, 전역 변수의 원래 값인 10이 그대로 출력되는 것을 확인할 수 있습니다.
global 키워드란?
함수 내부에서 전역 변수를 선언해야 할 때 사용하는 것이 바로 global 키워드입니다.
일반적으로 함수 내부에서 선언된 변수의 유효 범위는 함수가 끝나는 시점까지로 제한됩니다.
하지만 변수를 함수 외부에서도 사용하고 싶다면, 변수를 선언할 때 global 키워드를 함께 사용해야 합니다.
두 경우의 차이점은 다음 예제를 통해 확인해 보겠습니다.
예제
def func():
a = 5
print("Inside function:", a)
func()
print("Outside function:", a)
출력 결과
Inside function: 5
Traceback (most recent call last):
print("Outside function:", a)
NameError: name 'a' is not defined
위 예제에서 변수 a는 지역 변수이기 때문에 함수 외부에서 접근할 수 없습니다. 따라서 함수 밖에서 a의 값을 참조하려고 하면 NameError 예외가 발생합니다.
global 키워드 사용하기
앞선 예제에서 발생한 예외는 변수 a를 global 키워드로 선언하면 해결할 수 있습니다.
예제
def func():
global a
a = 5
print("Inside function:", a)
func()
print("Outside function:", a)
출력 결과
Inside function: 5
Outside function: 5
위 예제에서 변수 a는 global 키워드를 통해 전역 변수로 선언되었기 때문에, 함수 외부에서도 그 값을 자유롭게 접근하고 사용할 수 있습니다.