본문 바로가기
Language

파이썬 'global'과 'nonlocal' 키워드 설명 및 예제

by markbyun 2025. 4. 19.

파이썬 키워드들 중 'global'과 'nonlocal'은 파이썬의 "변수의 범위" 를 다룰 때 등장합니다. 즉, 어떤 변수에 접근하거나 수정할 때 "이 변수가 어디에 있는지"를 정하는 키워드 입니다.

 

1. 변수 범위 리뷰

본격적으로 들어가기 전에, 스코프(scope)는 변수에 접근할 수 있는 프로그램의 범위를 의미한다는 것을 기억하세요.

  • 지역 스코프(Local scope): 함수 안에서
  • 전역 스코프(Global scope): 모든 함수 바깥에서
  • 포함 스코프(Enclosing scope): 다른 함수 안에 있는 함수에서

변수 범위

2. global 키워드

'global' 키워드는 현재 함수 바깥, 특히 전역 스코프(global scope)에 있는 변수를 수정할 때 사용합니다.

보통 함수 안에서 변수를 할당하면 지역 변수(local variable)가 새로 만들어집니다. 만약 모듈 수준(전역)에 이미 존재하는 변수를 수정하고 싶다면, 해당 변수를 global로 선언해야 합니다.

예제 1:

x = 10

def change_global():
    global x
    x = 20

change_global()
print(x)  # Output: 20

예제 2:

counter = 0

def increment():
    global counter
    for _ in range(5):
        counter += 1

increment()
print(counter)  # Output: 5

예제 3:

flag = False

def activate():
    global flag
    flag = True

activate()
print(flag)  # Output: True

비록 x, counter, flag가 함수 바깥에서 정의되었더라도, global 키워드를 사용하면 함수 안에서 이들의 값을 변경할 수 있습니다.
만약 global 키워드를 사용하지 않으면, 파이썬은 이 변수들을 새로운 지역 변수(local variable)로 취급하게 됩니다.

3. nonlocal 키워드

nonlocal 키워드는 중첩 함수(nested functions)에서 사용됩니다. 이 키워드를 사용하면 전역이 아닌, 바로 바깥 함수(enclosing scope)에 있는 변수를 수정할 수 있습니다. 이는 내부 함수(inner function)에서 외부 함수(outer function)의 변수를 업데이트하고 싶을 때 유용합니다.

예제 1:

def outer():
    y = 5

    def inner():
        nonlocal y
        y = 10

    inner()
    print(y)  # Output: 10

outer()

예제 2:

def outer():
    msg = "Hello"

    def inner():
        nonlocal msg
        msg += ", World!"

    inner()
    print(msg)  # Output: Hello, World!

outer()

예제 3:

def counter_maker():
    count = 0

    def counter():
        nonlocal count
        count += 1
        return count

    return counter

c = counter_maker()
print(c())  # Output: 1
print(c())  # Output: 2

이 모든 예제에서, 내부 함수는 nonlocal 키워드를 사용하여 외부 함수의 변수를 수정합니다. 만약 변수를 nonlocal로 선언하지 않았다면, 이런 수정은 불가능했을 것입니다.