프로그래밍/파이썬(Python)

파이썬(Python) 전역변수, 지역 변수: 완벽 가이드 (+코드)

프리다이어비티즈 2024. 10. 16. 00:01
반응형

목차

    파이썬에서 변수는 코드의 여러 부분에서 데이터를 저장하고 사용할 수 있게 해주는 중요한 역할을 합니다. 하지만 변수가 선언된 위치에 따라 그 범위(scope)가 달라지며, 이에 따라 전역 변수(global variable)와 지역 변수(local variable)가 구분됩니다. 이번 글에서는 파이썬의 전역 변수와 지역 변수가 무엇인지, 각각의 차이점과 사용법을 자세히 알아보겠습니다.

    공지

    본 포스팅의 무단도용 및 배포를 금지합니다.

    1. 변수의 범위란?

    변수의 범위(scope)는 해당 변수가 코드의 어느 부분에서 유효한지를 의미합니다. 파이썬에서는 변수를 사용하는 위치에 따라 전역 변수지역 변수로 나뉘며, 변수의 범위에 따라 접근 가능 여부가 결정됩니다.

    • 전역 변수 (Global Variable): 함수 외부에서 선언된 변수로, 프로그램 전체에서 접근 가능합니다.
    • 지역 변수 (Local Variable): 함수 내부에서 선언된 변수로, 해당 함수 내에서만 유효합니다

     

    2. 전역 변수(Global Variable)

    전역 변수는 함수 외부에서 선언되며, 프로그램 전체에서 접근할 수 있습니다. 이를 통해 여러 함수에서 같은 데이터를 공유할 수 있습니다.

    x = 10  # 전역 변수
    
    def print_global():
        print(f"전역 변수 x: {x}")
    
    print_global()  # 전역 변수 x: 10
    print(x)  # 10

    위 코드에서 x는 함수 외부에서 선언되었으므로 전역 변수입니다. 함수 print_global() 내에서도 전역 변수 x에 접근할 수 있습니다.

     

    3. 지역 변수(Local Variable)

    지역 변수는 함수 내부에서 선언되며, 해당 함수 내에서만 사용할 수 있습니다. 함수가 종료되면 지역 변수는 메모리에서 사라집니다.

    def local_example():
        y = 5  # 지역 변수
        print(f"지역 변수 y: {y}")
    
    local_example()  # 지역 변수 y: 5
    # print(y)  # 오류 발생: y는 함수 외부에서 접근할 수 없습니다.

    위 코드에서 y는 함수 local_example() 내부에서 선언된 지역 변수이므로 함수 외부에서는 접근할 수 없습니다.

     

    4. 전역 변수와 지역 변수의 차이

    • 범위: 전역 변수는 프로그램 전체에서 접근 가능하지만, 지역 변수는 해당 함수 내에서만 유효합니다.
    • 생명 주기: 전역 변수는 프로그램이 종료될 때까지 메모리에 유지되지만, 지역 변수는 함수가 종료되면 메모리에서 사라집니다.

    5. global 키워드 사용하기

    함수 내부에서 전역 변수를 수정하려면 global 키워드를 사용해야 합니다. 그렇지 않으면 함수 내에서 동일한 이름의 지역 변수가 새로 생성됩니다.

    x = 10  # 전역 변수
    
    def modify_global():
        global x  # 전역 변수 x를 사용하겠다고 명시
        x = 20
    
    print(f"함수 호출 전 x: {x}")  # 함수 호출 전 x: 10
    modify_global()
    print(f"함수 호출 후 x: {x}")  # 함수 호출 후 x: 20

    위 코드에서 global x를 사용하여 함수 내부에서 전역 변수 x를 수정할 수 있습니다.

     

    6. 중첩 함수와 nonlocal 키워드

    파이썬에서는 중첩 함수(nested function)를 사용할 수 있으며, 이때 nonlocal 키워드를 사용해 상위 함수의 변수를 수정할 수 있습니다.

    def outer_function():
        a = 5  # 지역 변수
    
        def inner_function():
            nonlocal a  # 상위 함수의 변수 a를 사용
            a = 10
    
        inner_function()
        print(f"외부 함수의 a: {a}")
    
    outer_function()  # 외부 함수의 a: 10

    위 코드에서 nonlocal 키워드를 사용하여 중첩 함수 내부에서 상위 함수의 지역 변수 a를 수정할 수 있습니다.

     

    7. 변수의 범위 규칙: LEGB 규칙

    파이썬에서 변수의 범위를 찾는 순서는 LEGB 규칙을 따릅니다.

    • L (Local): 가장 먼저 지역 범위(함수 내부)에서 변수를 찾습니다.
    • E (Enclosing): 중첩 함수의 상위 함수 범위를 확인합니다.
    • G (Global): 전역 범위(모듈 수준)에서 변수를 찾습니다.
    • B (Built-in): 파이썬 내장 범위에서 변수를 찾습니다.
    x = 50  # 전역 변수
    
    def outer():
        x = 30  # 외부 함수의 지역 변수
    
        def inner():
            x = 10  # 내부 함수의 지역 변수
            print(f"내부 함수 x: {x}")
    
        inner()
        print(f"외부 함수 x: {x}")
    
    outer()
    print(f"전역 x: {x}")

    출력 결과는 다음과 같습니다:

    내부 함수 x: 10
    외부 함수 x: 30
    전역 x: 50

    inner() 함수에서 x를 출력할 때 가장 가까운 범위인 내부 함수의 지역 변수를 사용합니다. 이처럼 파이썬은 LEGB 규칙을 따라 변수를 검색합니다.

     

    8. 사람들이 자주 묻는 질문들

    8.1 전역 변수를 많이 사용하는 것이 좋은가요?

    전역 변수는 코드의 복잡성을 증가시키고, 특히 여러 함수에서 같은 전역 변수를 수정할 때 예기치 못한 부작용을 초래할 수 있습니다. 따라서 전역 변수의 사용을 최소화하고, 필요하다면 함수의 매개변수나 반환 값을 활용하여 데이터를 전달하는 것이 좋습니다.

     

    8.2 전역 변수와 지역 변수의 이름이 같으면 어떻게 되나요?

    함수 내부에서 전역 변수와 동일한 이름의 변수를 선언하면, 이는 새로운 지역 변수가 됩니다. 함수 내부에서는 지역 변수가 우선 사용되며, 전역 변수는 영향을 받지 않습니다.

    x = 5
    
    def example():
        x = 10  # 지역 변수
        print(f"함수 내부 x: {x}")
    
    example()  # 함수 내부 x: 10
    print(f"함수 외부 x: {x}")  # 함수 외부 x: 5

    이 경우 함수 내부의 x는 지역 변수이고, 함수 외부의 x는 전역 변수로 각각 독립적으로 존재합니다.


    파이썬에서 전역 변수와 지역 변수는 변수의 범위와 생명 주기에 따라 다르게 동작하며, 이를 적절히 이해하고 사용하는 것이 중요합니다. 전역 변수는 프로그램 전체에서 접근이 가능하지만, 무분별하게 사용하면 코드의 복잡성을 높이고 디버깅을 어렵게 만들 수 있습니다. 반면 지역 변수는 해당 함수 내에서만 유효하기 때문에 코드의 안전성과 가독성을 높이는 데 유리합니다. 이번 글이 전역 변수와 지역 변수의 개념과 사용법을 이해하는 데 도움이 되었길 바랍니다. 추가로 궁금한 점이 있다면 언제든지 문의해주세요.

    반응형