파이썬에서 변수를 찾는 순서, 즉 스코프(scope) 규칙을 이해하면 코드를 훨씬 명확하게 작성할 수 있습니다. Mark Lutz의 저서 『Learning Python』에서는 이 규칙을 쉽게 기억할 수 있는 암기법으로 LEGB를 소개합니다.
LEGB란 무엇인가?
LEGB는 파이썬이 변수 이름을 검색하는 순서를 나타내며, 가장 좁은 범위에서 가장 넓은 범위로 확장됩니다.
L — Local (지역)
함수 내부에 정의된 변수를 의미합니다. 함수가 호출될 때 생성되며, 해당 함수 안에서만 접근할 수 있습니다.
E — Enclosing (둘러싸는 범위)
바깥쪽 함수가 내부 함수를 감싸고 있을 때, 그 바깥 함수의 지역 범위에 정의된 변수를 말합니다. 주로 중첩 함수(nested function)나 클로저(closure)에서 사용됩니다.
G — Global (전역)
파일이나 모듈의 최상위 레벨에서 정의된 변수입니다. 모듈 전체에서 접근할 수 있습니다.
B — Built-in (내장)
파이썬 인터프리터가 시작될 때 미리 로드되는 이름들입니다. print, len, range 같은 내장 함수와 예외 클래스들이 여기에 해당합니다.
변수 검색 순서 예시
x = "global" # G: 전역
def outer():
x = "enclosing" # E: 둘러싸는 범위
def inner():
x = "local" # L: 지역
print(x) # local 출력
inner()
outer()
print(x) # global 출력파이썬은 변수를 참조할 때 L → E → G → B 순서대로 검색하고, 가장 먼저 찾은 값을 사용합니다. 어디에도 없으면 NameError가 발생합니다.
정리
LEGB 규칙만 기억해도 파이썬에서 변수가 어디서 왔는지, 어떤 값이 참조되는지 명확하게 예측할 수 있습니다. 특히 중첩 함수나 클로저를 다룰 때 이 규칙을 이해하고 있으면 디버깅 시간을 크게 줄일 수 있습니다.