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

Python 변수 스코프(범위) 완벽 이해하기: 전역 변수와 지역 변수

프로그램 안에 선언된 모든 변수가 코드의 어느 위치에서든 접근할 수 있는 것은 아닙니다. 변수에 접근할 수 있는지는 그 변수를 어디에서 선언했는가에 따라 달라집니다.

이처럼 특정 식별자(변수 이름)에 접근할 수 있는 프로그램상의 영역을 스코프(scope, 범위)라고 하며, Python에서는 변수의 스코프를 크게 두 가지로 구분합니다.

  • 전역 변수(Global Variable)
  • 지역 변수(Local Variable)

전역 변수 vs 지역 변수

두 스코프의 차이는 선언 위치에 따라 결정됩니다.

  • 지역 변수: 함수 본문 안쪽에서 정의된 변수로, 해당 함수 내부에서만 접근할 수 있습니다.
  • 전역 변수: 함수 본문 바깥쪽(모듈 최상위 레벨)에서 정의된 변수로, 프로그램 전체의 모든 함수에서 접근할 수 있습니다.

즉, 지역 변수는 자신이 선언된 함수 안에서만 유효하며, 함수를 호출하는 순간 그 함수 내부에 선언된 변수들이 스코프에 포함됩니다. 반면 전역 변수는 프로그램 어디에서든 읽을 수 있습니다.

예제 코드

다음 예제는 같은 이름의 total 변수가 함수 안과 밖에서 어떻게 다르게 동작하는지 보여줍니다.

#!/usr/bin/python3

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

결과 해석

결과가 다르게 나타나는 이유는 다음과 같습니다.

  • 함수 sum() 내부에서 total = arg1 + arg2 문장은 새로운 지역 변수 total을 생성합니다. 따라서 함수 안에서 출력되는 값은 30입니다.
  • 반면 함수 외부의 total은 처음에 선언한 전역 변수로, 함수 내부의 할당과는 무관하게 초기값 0을 그대로 유지합니다.

참고: global 키워드

만약 함수 내부에서 전역 변수 자체를 수정하고 싶다면 global 키워드를 사용해야 합니다.

total = 0

def sum(arg1, arg2):
    global total          # 전역 변수임을 명시
    total = arg1 + arg2   # 이제 전역 변수를 수정
    return total

sum(10, 20)
print(total)  # 출력: 30

이처럼 Python의 스코프 규칙을 정확히 이해하면, 의도치 않은 변수 충돌이나 값 덮어쓰기 버그를 예방하고 더 깔끔한 코드를 작성할 수 있습니다.