Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 네임스페이스와 변수 스코프, LEGB 규칙까지 한눈에 정리

네임스페이스란 무엇일까요?

네임스페이스(Namespace)는 파이썬에서 변수의 범위(scope)를 구현하는 핵심 메커니즘입니다. 패키지, 모듈, 클래스, 함수, 메서드 각각은 고유한 "네임스페이스"를 가지며, 변수 이름은 바로 이 네임스페이스 안에서 해석됩니다.

네임스페이스의 생성과 소멸

함수, 모듈, 패키지가 평가되어 실행을 시작하는 순간 새로운 네임스페이스가 생성됩니다. 이를 일종의 "실행 컨텍스트(evaluation context)"라고 생각하면 이해하기 쉽습니다. 실행이 끝나면 해당 네임스페이스는 함께 제거되고, 그 안에 있던 변수들 역시 더 이상 유효하지 않게 됩니다.

다만 예외가 하나 있습니다. 이름이 지역 네임스페이스에서 찾을 수 없을 때 대신 참조되는 전역(global) 네임스페이스가 별도로 존재합니다.

변수 이름은 어떻게 찾아질까?

파이썬은 변수 이름을 만나면 먼저 지역(local) 네임스페이스, 즉 함수 본문이나 모듈 등 현재 실행 중인 코드의 범위를 확인합니다. 거기서 찾지 못하면 이어서 전역 네임스페이스를 검색합니다.

변수는 어디에 생성될까?

일반적으로 변수는 지역 네임스페이스에만 생성됩니다. 하지만 global 문과 nonlocal 문을 사용하면 지역 범위가 아닌 다른 네임스페이스에도 변수를 생성할 수 있습니다.

스코프 결정과 LEGB 규칙

변수가 실제로 사용될 때 그 값이 어디에서 오는지 판단하는 과정을 스코프 결정(scope resolution)이라고 합니다. 파이썬의 스코프 결정은 널리 알려진 LEGB 규칙을 따릅니다.

L — Local (지역)

함수(또는 lambda) 내부에서 어떤 방식으로든 할당된 이름 중, 해당 함수 안에서 global로 선언되지 않은 것을 의미합니다.

E — Enclosing-function locals (둘러싸는 함수의 지역 범위)

안쪽에서 바깥쪽 순서로, 정적으로 둘러싸고 있는 모든 상위 함수(또는 lambda)의 지역 범위에 존재하는 이름입니다.

G — Global (전역 · 모듈)

모듈 파일의 최상위 레벨에서 할당되었거나, 같은 파일 내부의 def 안에서 global 문을 실행하여 할당된 이름입니다.

B — Built-in (내장)

open, range, SyntaxError처럼 파이썬 내장(builtins) 모듈에 미리 정의되어 있는 이름들을 말합니다.