파이썬 global 키워드 마스터하기: 사용법과 타이밍
파이썬 global 키워드 마스터하기: 사용법과 타이밍
이 가이드는 파이썬 global 키워드, 규칙, 실전 활용 사례, 모듈 간 전역 변수 관리 모범 사례를 설명합니다.
global 키워드란?
파이썬에서 global 키워드는 함수 내 변수가 새 지역 변수가 아니라 모듈 레벨 변수를 참조함을 선언합니다. 함수가 자신의 스코프 밖 변수를 읽거나 수정해야 할 때 필수적입니다.
global 사용 규칙
- 함수 내부에서 생성된 변수는 기본적으로 지역 변수.
- 모듈 레벨 정의 변수는 자동 전역; 읽기만 할 땐
global 불필요.
- 모듈 레벨 변수에 할당 의도 시 함수 내부에서
global 사용.
- 함수 밖에서
global 배치 시 효과 없음.
global 실전 활용
아래 예제들은 함정과 올바른 접근을 모두 보여줍니다.
예제 1: 함수 내부에서 전역 변수 접근
c = 1 # 전역 변수
def add():
print(c)
add()
출력:
1
여기서 c는 add() 내부 할당 없으므로 읽기 성공.
예제 2: global 없이 전역 변수 수정 시도
c = 1 # 전역 변수
def add():
c = c + 2 # c 수정 시도
print(c)
add()
출력:
UnboundLocalError: local variable 'c' referenced before assignment
에러 발생 이유: 파이썬은 c를 할당 전 참조되는 새 지역 변수로 간주.
예제 3: global로 전역 변수 수정
c = 0 # 전역 변수
def add():
global c
c = c + 2
print("Inside add():", c)
add()
print("In main:", c)
출력:
Inside add(): 2
In main: 2
global c 선언으로 함수가 모듈 레벨 c 업데이트, 변경사항이 함수 밖에서도 보임.
파이썬 모듈 간 전역 변수 공유
대규모 앱에서는 설정을 전용 모듈(config.py 등)에 중앙화하는 게 일반적. 다른 모듈에서 임포트해 수정 가능, 프로그램 전체에서 일관된 상태 유지.
예제 4: 모듈 간 전역 변수
config.py 생성:
a = 0
b = "empty"
update.py로 전역 수정:
import config
config.a = 10
config.b = "alphabet"
main.py로 변경 확인:
import config
import update
print(config.a)
print(config.b)
출력:
10
alphabet
이 패턴은 공유 상태를 한 곳에 두면서 다른 모듈에서 제어된 업데이트 허용.
중첩 함수에서 global 사용
중첩 함수가 외부 함수의 지역 변수 수정 필요 시, global 키워드로 진정한 전역 변수 생성 가능.
예제 5: 중첩 함수 내 전역 변수
def foo():
x = 20
def bar():
global x
x = 25
print("Before calling bar:", x)
print("Calling bar now")
bar()
print("After calling bar:", x)
foo()
print("x in main:", x)
출력:
Before calling bar: 20
Calling bar now
After calling bar: 20
x in main: 25
foo() 내부에서 x는 지역 변수 유지. 중첩 bar()가 x를 전역 선언해 할당이 모듈 레벨 x에 영향, foo() 종료 후에도 보임.
global 편리하지만, 일반적으로 전역 상태 변경보다 새 값 반환하는 함수 설계가 더 낫습니다. 이는 코드 명확성과 테스트 용이성 증진. 자세한 언어 규칙은 공식 파이썬 문서 global statement 참조.