Python
지역변수, 전역변수 (파이썬 변수 종류)
by yororing
2024. 9. 26.
00 개요
- 프로그래밍에서는 변수를 어떻게 선언하고 사용하느냐에 따라 프로그램의 구조와 성능에 큰 영향을 미칠 수 있기에 변수를 다루는 방법은 매우 중요함
- 선언에 따른 변수의 종류: 지역변수, 전역변수의 정의, 특징, 사용 사례에 대한 정리 + 글로벌 키워드 사용, 논리적 변수 스코프, 정적변수에 대한 추가적인 설명
01 지역변수 (Local Variable)
1. 정의
- 특정 함수나 코드 블록 내에서만 사용 가능한 변수
- 함수 내에서 선언된 변수는 해당 함수가 실행되는 동안에만 메모리에 존재하고, 함수가 종료되면 자동으로 사라짐
- 지역변수는 함수 내부에서 일시적으로 값을 저장하고 계산할 때 사용되며, 함수 외부의 전역 변수와 독립적으로 동작
- 예시:
def my_function():
local_var = 10 # 지역변수 선언
print(local_var)
my_function()
# print(local_var) # 오류: 함수 외부에서 접근 불가
2. 특징
- 선언 위치: 함수나 메소드 내에서 선언
- 사용 범위: 선언된 함수나 블록 내부
- 생명주기: 함수가 실행될 때 생성되고 종료 시 소멸
- 장점: 함수 내부에서만 사용되므로 충돌이 적고, 메모리 관리 측면에서 효율적
3. 주요 기능 (정리)
1) 함수 내부에서만 사용 가능
- local 변수는 함수 내부에서만 접근 가능하며, 함수 외부에서는 사용 불가능
- 이를 통해 함수 외부에서 변수의 값이 의도치 않게 변경되는 것 방지 가능
def my_function():
x = 10 # x는 로컬 변수
print(x)
my_function() # 10 출력
print(x) # error: x는 함수 외부에서 정의되지 않음
2) 독립적인 메모리 공간
- 함수가 호출될 때마다 local 변수는 새롭게 메모리에 할당되며, 다른 함수 호출과 독립적으로 동작함
- 즉, 동일함 함수가 여러 번 호출되더라도 각 호출은 고유한 local 변수를 가짐
def increment_counter():
counter = 0 # 로컬 변수
counter += 1
print(counter)
increment_counter() # 1 출력
increment_counter() # 1 출력 (새로운 로컬 변수)
3) 기본적으로 함수 종료 후 삭제됨
- 함수가 끝나면 local 변수는 메모리에서 해제되므로, 그 값은 유지되지 않음
- 다시 함수가 호출되면 변수가 새롭게 생성됨
4) 함수 외부 변수와의 구분 (Scope)
- 함수 외부에 같은 이름의 변수가 있어도, 함수 내부에서는 local 변수가 우선적으로 사용됨
- 이는 "변수 스코프 (scope)"라고 하며, 함수 내부와 외부의 변수 충돌을 방지함
x = 5 # 전역 변수
def my_function():
x = 10 # 로컬 변수
print(x)
my_function() # 10 출력 (로컬 변수)
print(x) # 5 출력 (전역 변수)
5) 변수의 초기화
- local 변수는 함수 내에서 처음 선언될 때 초기화해야 함
- 초기화되지 않은 상태에서 사용하려고 하면 error 발생
def my_function():
print(x) # error: x가 선언되지 않음
x = 10
my_function()
02 전역변수 (Global Variable)
1. 정의
- 프로그램 전체에서 접근할 수 있는 변수
- 함수 외부에서 선언된 변수는 전역변수로 간주됨, 모든 함수 및 코드 블록에서 접근 가능
- 예시:
global_var = 20 # 전역변수 선언
def my_function():
print(global_var) # 전역변수 참조
my_function()
2. 특징
- 선언 위치: 함수 외부
- 사용 범위: 프로그램 전역
- 생명주기: 프로그램이 시작될 때 생성되고 종료 시 소멸
- 단점: 너무 많이 사용하면 코드 가독성과 유지보수성 감소, 의도치 않은 값 변경 가능성 존재
03 글로벌 키워드 사용 (Global Keyword)
- global 키워드를 사용하여전역변수 수정 가능
- 함수 내에서 global 키워드 사용하지 않고 같은 이름의 변수를 선언 시 동일한 이름의 지역변수가 새로 생성되는 원리
- 예시:
global_var = 20 # 전역변수
def modify_global():
global global_var # 전역변수 수정 가능, 만약 global 키워드 미사용시 함수 내에서 global_var 수정 불가능
global_var = 30
modify_global()
print(global_var) # 출력: 30
04 논리적 변수 스코프 (Variable Scope)
- 변수의 스코프 = 변수에 접근할 수 있는 코드 영역
- 이를 통해 지역변수와 전역변수 간의 충돌 방지 가능
- 지역변수 스코프: 변수가 선언된 함수나 블록
- 전역변수 스코프: 프로그램 전체
- 파이썬의 LEGB 규칙: 파이썬은 변수를 찾을 때 Local, Enclosing, Global, Built-in 순서로 검색함
- 예시:
def outer_function():
outer_var = 'outer'
def inner_function():
inner_var = 'inner'
print(outer_var) # outer_function()의 지역변수 참조 가능
inner_function()
# print(inner_var) # 오류: inner_function() 내부에서만 사용 가능
05 정적 변수 (Static Variable)
- 파이썬에서는 C와 같은 정적 변수가 없지만, 함수의 속성을 활용하여 비슷한 효과를 낼 수 있음
- 함수 호출 시 값이 유지되며, 마치 함수가 종료되어도 값을 기억하는 것처럼 동작함
- 예시:
- counter는 함수의 속성으로 선언되어, 함수가 호출될 때마다 값이 유지됨
def static_var_example():
if not hasattr(static_var_example, "counter"):
static_var_example.counter = 0 # 정적 변수처럼 사용
static_var_example.counter += 1
print(static_var_example.counter)
static_var_example() # 출력: 1
static_var_example() # 출력: 2
06 정리
- 변수는 코드에서 데이터를 저장하고 처리하는 데 매우 중요한 역할을 함
- 지역변수와 전역변수의 올바른 사용은 코드의 효율성과 유지보수성을 높이는 데 필수적
- 파이썬에서의 global 키워드와 scope 규칙 (LEGB)을 이해하면 더 나은 코드 구조 설계 가능