python / / 2024. 8. 19. 07:47

[python] nonlocal과 global

Python에서 nonlocalglobal 키워드는 변수를 참조하거나 수정할 때, 그 변수의 범위(scope)를 명시적으로 지정하는 데 사용된다. 이 두 키워드는 주로 함수 내에서 사용되며, 함수 내부에서 변수의 값을 읽거나 수정할 때 어느 범위의 변수를 참조할지 결정하는 중요한 역할을 한다.


1. 변수의 범위(Scope)

먼저 Python에서 변수의 범위(scope)를 이해하는 것이 중요하다. Python에는 네 가지 주요 범위가 있다.

  1. Local Scope (지역 범위): 함수 내부에서 정의된 변수. 이 변수는 해당 함수 내에서만 접근할 수 있다.
  2. Enclosing Scope (내포 범위): 중첩된 함수에서 바깥 함수의 변수. 중첩된 함수가 이 변수를 참조할 수 있다.
  3. Global Scope (전역 범위): 함수 밖에서 정의된 변수. 이 변수는 모듈 전체에서 접근할 수 있다.
  4. Built-in Scope (내장 범위): Python에서 기본으로 제공하는 내장 함수 및 예외 같은 것들이 포함된 범위.

이제 nonlocalglobal 키워드를 통해 각 범위에서 변수를 어떻게 참조하고 수정할 수 있는지 알아보자.

2. global 키워드

global 키워드란?

global 키워드는 함수 내부에서 전역 변수를 참조하거나 수정할 때 사용된다. 기본적으로, 함수 내부에서 변수를 정의하면 해당 변수는 지역 변수로 취급되며, 함수 외부의 전역 변수와는 다른 별개의 변수가 된다. 그러나 global 키워드를 사용하면 함수 내부에서 전역 변수를 직접 수정할 수 있다.

global 사용 예제

x = 10  # 전역 변수

def modify_global():
    global x  # 전역 변수 x를 참조
    x = 20    # 전역 변수 x를 수정

modify_global()
print(x)  # 20 출력

위 코드에서 global x는 함수 modify_global 내에서 x 변수를 전역 변수로 취급하게 만든다. 따라서 함수 내부에서 x의 값을 20으로 수정하면, 전역 범위의 x 값이 변경된다.

global의 활용

global 키워드는 다음과 같은 상황에서 유용하다.

  • 전역 변수 수정: 함수 내부에서 전역 변수의 값을 변경해야 할 때
  • 상태 유지: 프로그램의 상태를 전역 변수로 유지해야 할 때

3. nonlocal 키워드

nonlocal 키워드란?

nonlocal 키워드는 중첩된 함수(내부 함수)에서 바깥 함수의 변수를 참조하거나 수정할 때 사용된다. 기본적으로, 내부 함수에서 변수를 정의하면 해당 변수는 내부 함수의 지역 변수가 된다. 그러나 nonlocal 키워드를 사용하면 내부 함수에서 바깥 함수의 변수를 참조하거나 수정할 수 있다.

nonlocal 사용 예제

def outer_function():
    y = 5  # 외부 함수 변수

    def inner_function():
        nonlocal y  # 바깥 함수의 y를 참조
        y = 10      # 바깥 함수의 y를 수정

    inner_function()
    print(y)  # 10 출력

outer_function()

위 코드에서 nonlocal yinner_functionouter_functiony 변수를 참조하게 만든다. 따라서 inner_function에서 y의 값을 10으로 변경하면, 바깥 함수의 y 값이 변경된다.

nonlocal의 활용

nonlocal 키워드는 다음과 같은 상황에서 유용하다.

  • 클로저(Closure)에서 상태 유지: 클로저에서 바깥 함수의 상태를 유지하고 싶을 때
  • 중첩 함수 간 데이터 공유: 중첩 함수들이 공통된 변수를 공유해야 할 때

4. globalnonlocal의 차이점

globalnonlocal은 변수의 범위를 지정하는 데 사용된다는 점에서 비슷하지만, 사용하는 상황과 작동 방식에 차이가 있다.

  • 적용 범위:
    • global: 전역 변수를 참조하거나 수정할 때 사용된다.
    • nonlocal: 중첩 함수에서 바깥 함수의 변수를 참조하거나 수정할 때 사용된다.
  • 사용 위치:
    • global: 함수 내에서 전역 변수를 수정하고자 할 때 사용된다.
    • nonlocal: 중첩된 함수에서 바깥 함수의 변수를 수정하고자 할 때 사용된다.
  • 상태 관리:
    • global: 프로그램 전체의 상태를 전역 변수를 통해 관리할 때 유용하다.
    • nonlocal: 함수 내부에서 특정 상태를 유지하거나 공유할 때 유용하다.

5. 주의사항 및 권장사항

주의사항

  • 가독성 저하: 전역 변수나 nonlocal 변수를 많이 사용하면 코드의 가독성이 떨어질 수 있다. 특히, global 키워드를 남용하면 코드의 상태를 추적하기 어려워진다.
  • 의도하지 않은 수정: globalnonlocal을 잘못 사용하면 의도치 않게 변수를 수정할 수 있다. 이는 디버깅을 어렵게 만든다.

권장사항

  • 최소한의 사용: 가능한 한 globalnonlocal 키워드의 사용을 최소화하고, 지역 변수를 사용하는 것을 권장한다. 전역 변수나 바깥 함수의 변수를 사용하지 않아도 되는 상황에서는 사용하지 않는 것이 좋다.
  • 명확한 변수명: 전역 변수나 nonlocal 변수를 사용할 때는 명확한 변수명을 사용하여 혼동을 피하고, 코드의 가독성을 유지해야 한다.
반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유