Python 변수 스코프와 생명주기, 로컬 vs 글로벌 변수
Python에서 변수는 특정 코드 블록 내에서 정의되고 사용되며, 이때 해당 변수가 어느 범위에서 접근 가능한지 결정하는 것이 바로 '변수 스코프'입니다. 변수 스코프는 프로그램의 이해도를 높이고 버그를 줄이기 위한 중요한 개념입니다. 이 글에서는 Python의 로컬 변수와 글로벌 변수의 차이점과 그들이 코드에서 어떤 방식으로 동작하는지 자세히 설명합니다.
목차
- 변수 스코프란 무엇인가?
- 로컬 변수: 함수 내에서의 변수
- 글로벌 변수: 전역에서 사용 가능한 변수
- 변수 생명주기: 선언부터 소멸까지
- global 키워드와 nonlocal 키워드
- 파이썬의 LEGB 규칙
1. 변수 스코프란 무엇인가?
변수 스코프(scope)는 변수에 접근할 수 있는 범위를 의미합니다. 즉, 변수가 어디에서 선언되었는지에 따라 그 변수를 사용할 수 있는 영역이 결정됩니다. Python에서는 주로 두 가지 종류의 스코프가 있습니다: 로컬(Local) 스코프와 글로벌(Global) 스코프입니다. 또한, 스코프는 함수나 클래스의 정의에 따라 제한되며, 이를 통해 코드의 구조와 가독성을 높일 수 있습니다.
2. 로컬 변수: 함수 내에서의 변수
로컬 변수는 함수 내부에서 선언된 변수로, 그 함수 안에서만 유효합니다. 함수가 호출될 때 로컬 변수가 생성되며, 함수가 종료되면 해당 변수는 사라집니다. 예를 들어:
def my_function():
x = 10 # 로컬 변수
print(x)
my_function() # 10 출력
print(x) # 오류 발생: x는 함수 외부에서 정의되지 않음
위 예제에서 x
는 my_function()
함수 내에서만 존재하는 로컬 변수입니다. 함수 외부에서 x
를 참조하려고 하면 오류가 발생합니다. 이처럼 로컬 변수는 함수 내에서만 사용될 수 있습니다.
3. 글로벌 변수: 전역에서 사용 가능한 변수
글로벌 변수는 함수 외부에서 선언되며, 프로그램 전체에서 접근할 수 있습니다. 글로벌 변수는 스크립트의 어디에서든 사용할 수 있지만, 함수 내에서 글로벌 변수를 수정하려면 global
키워드를 사용해야 합니다. 예를 들어:
x = 10 # 글로벌 변수
def my_function():
global x
x = 20 # 글로벌 변수 수정
print(x)
my_function() # 20 출력
print(x) # 20 출력
여기서 x
는 함수 외부에 선언된 글로벌 변수로, global
키워드를 사용하면 함수 내부에서 수정할 수 있습니다. 이를 통해 글로벌 변수는 프로그램 전반에 걸쳐 유지되고 활용될 수 있습니다.
4. 변수 생명주기: 선언부터 소멸까지
변수의 생명주기는 해당 변수가 메모리에 존재하는 기간을 의미합니다. 로컬 변수는 함수가 호출될 때 생성되고, 함수가 종료되면 소멸합니다. 반면, 글로벌 변수는 프로그램이 시작될 때 생성되고, 프로그램이 종료될 때까지 유지됩니다. 예를 들어:
def my_function():
y = 5 # 로컬 변수: 함수 실행 동안만 존재
print(y)
my_function() # 5 출력
print(y) # 오류 발생: y는 함수 외부에서 정의되지 않음
로컬 변수 y
는 함수 내에서만 존재하고, 함수가 종료되면 사라집니다. 반면, 글로벌 변수는 프로그램이 실행되는 동안 생명주기가 유지됩니다.
5. global 키워드와 nonlocal 키워드
Python에서는 함수 내에서 글로벌 변수를 수정하려면 global
키워드를 사용해야 합니다. 또한, 중첩된 함수에서 상위 함수의 변수를 수정하려면 nonlocal
키워드를 사용합니다. 예를 들어:
x = 10 # 글로벌 변수
def outer_function():
x = 5 # 로컬 변수
def inner_function():
nonlocal x # 상위 함수의 변수 수정
x = 15
inner_function()
print(x) # 15 출력
outer_function()
print(x) # 10 출력
nonlocal
키워드를 사용하면 상위 함수의 로컬 변수를 수정할 수 있습니다. 하지만 이는 글로벌 변수와는 다르며, 중첩된 함수의 스코프에서만 유효합니다.
6. 파이썬의 LEGB 규칙
Python은 변수를 찾을 때 LEGB 규칙을 따릅니다. LEGB는 Local, Enclosing, Global, Built-in의 약자로, Python은 변수를 아래와 같은 순서로 탐색합니다:
- Local: 함수 내에서 선언된 로컬 변수.
- Enclosing: 중첩 함수에서 상위 함수의 로컬 변수.
- Global: 함수 외부에서 선언된 글로벌 변수.
- Built-in: Python 내장 함수와 변수.
이 규칙을 바탕으로 Python은 가장 가까운 스코프에서 변수를 찾습니다. 따라서 같은 이름의 변수가 다른 스코프에 있을 경우, LEGB 규칙에 따라 우선순위가 적용됩니다.
'프로그래밍 언어 > 파이썬' 카테고리의 다른 글
Python int 데이터 타입과 주요 함수 활용법 (0) | 2024.11.05 |
---|---|
Python 데이터 타입: 숫자형, 문자열, 컬렉션 다루기 (0) | 2024.10.30 |
초보자를 위한 Python 인터프리터 설정 및 사용법 (0) | 2024.10.19 |
Python 프로그램 작성 기초, 시작부터 실행까지 (0) | 2024.10.15 |
초보자를 위한 Python 설치와 환경 설정 방법 (0) | 2024.10.11 |