더북(TheBook)

어떻게 동작하는지 보이는가? 첫 번째 함수는 함수 안에서 생성한 변수를 사용했기 때문에 지역 변수를 사용한다.

하지만 두 번째 함수 funcB는 변수를 생성하지 않았다. 그러면 첫 번째 줄에서 선언(count = 10)한 전역 변수를 사용하게 된다.

그런데 전역 변수를 사용하고 싶은데, 해당 변수에 값을 대입하면 문제가 발생한다. 파이썬은 데이터 선언 개념이 없기 때문에 변수에 값을 대입하는 순간 신규 변수를 생성하고 만다. 이 부분이 문제다. 왜냐하면 변수를 만들고 나면 함수 안에서 만든 것이기 때문에 지역 변수를 만들어 버리기 때문이다.

예를 들어 funcBcount 값을 변경한다고 해 보자. 변경은 가능하지만 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 출력
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.