본문 바로가기
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)을 이해하면 더 나은 코드 구조 설계 가능