어떻게 동작하는지 보이는가? 첫 번째 함수는 함수 안에서 생성한 변수를 사용했기 때문에 지역 변수를 사용한다.
하지만 두 번째 함수 funcB는 변수를 생성하지 않았다. 그러면 첫 번째 줄에서 선언(count = 10)한 전역 변수를 사용하게 된다.
그런데 전역 변수를 사용하고 싶은데, 해당 변수에 값을 대입하면 문제가 발생한다. 파이썬은 데이터 선언 개념이 없기 때문에 변수에 값을 대입하는 순간 신규 변수를 생성하고 만다. 이 부분이 문제다. 왜냐하면 변수를 만들고 나면 함수 안에서 만든 것이기 때문에 지역 변수를 만들어 버리기 때문이다.
예를 들어 funcB가 count 값을 변경한다고 해 보자. 변경은 가능하지만 funcB는 결국 전역 변수를 복제한 지역 변수 count를 사용하게 된다. 어느 곳에서나 접근할 수 있는 count 변수를 변경하려고 했다면 변경되지 않을 것이다.
def funcB():
count = 100 # 지역 변수로 변경된다.
# 전역 변수 count에 영향 없다.
print(count) # 지역 변수 100이 출력된다.
해결책은 global 문을 사용하는 것이다. 이 문법은 파이썬이 지역 변수를 사용하는 것을 피하게 해 준다. 그러면 전역 변수가 있다고 가정하고, 전역 변수를 사용한다. 예제를 확인해 보자.
count = 10 # 전역 변수 생성
def my_func():
global count
count += 1
my_func() # my_func 함수 호출
print(count) # 11 출력