Python에서 변수가 선언되는 위치에 따라 그 변수의 유효 범위(scope)가 결정됩니다. 함수 본문 내부에서 정의된 변수는 지역 범위(local scope)를 가지며, 함수 외부에서 정의된 변수는 전역 범위(global scope)를 가집니다.
즉, 지역 변수는 해당 변수가 선언된 함수 내부에서만 접근할 수 있지만, 전역 변수는 프로그램 전체 어디에서든 모든 함수가 접근할 수 있습니다. 함수를 호출하면 그 함수 내부에서 선언된 변수들이 유효 범위에 포함됩니다.
예제 코드
#!/usr/bin/python
total = 0 # 전역 변수
# 함수 정의
def sum(arg1, arg2):
# 두 매개변수를 더한 후 반환합니다.
total = arg1 + arg2 # 여기서 total은 지역 변수입니다.
print("함수 내부의 지역 total : ", total)
return total
# sum 함수 호출
sum(10, 20)
print("함수 외부의 전역 total : ", total)실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
함수 내부의 지역 total : 30 함수 외부의 전역 total : 0
결과 분석
출력 결과가 흥미로운 이유는 함수 안에서 total에 30이라는 값이 할당되었음에도 불구하고, 함수 밖에서 출력한 total 값은 여전히 0이기 때문입니다.
그 이유는 함수 내부에서 total = arg1 + arg2처럼 변수에 값을 할당하는 순간, Python은 같은 이름의 새로운 지역 변수를 생성하기 때문입니다. 따라서 함수 내부의 total과 외부의 전역 total은 이름만 같을 뿐 서로 완전히 다른 변수입니다.
global 키워드로 전역 변수 수정하기
만약 함수 내부에서 전역 변수 자체를 변경하고 싶다면 global 키워드를 사용해야 합니다.
total = 0
def sum(arg1, arg2):
global total # 전역 변수임을 명시
total = arg1 + arg2
return total
sum(10, 20)
print(total) # 출력: 30이처럼 유효 범위의 개념을 정확히 이해하면, 변수 충돌이나 의도하지 않은 값 손실 같은 버그를 예방할 수 있습니다.