..

Search

19) 변수의 유효 범위

변수의 유효 범위


변수의 유효 범위(variable scope)

파이썬에서는 변수가 선언된 위치에 따라 해당 변수가 영향을 미치는 범위까지 달라지며, 이것을 변수의 유효 범위(variable scope)라고 부릅니다.

예를 들어, 함수 내부에서 선언된 변수는 해당 함수 내부에서만 사용할 수 있으며, 함수 밖에서는 사용할 수 없습니다.

 

파이썬에서 변수는 유효 범위에 따라 다음과 같이 나눌 수 있습니다.

 

1. 지역 변수(local variable)

2. 전역 변수(global variable)


지역 변수(local variable)

파이썬에서 지역 변수(local variable)란 함수 내에서 선언된 변수를 의미합니다.

이렇게 함수 내에서 선언된 지역 변수는 일반적으로 함수 내에서만 사용할 수 있습니다.

예제

def func():

    local_var = "지역 변수"

    print(local_var)    

 

 

func()

# print(local_var)

코딩연습 ▶

실행 결과

지역 변수

 

위의 예제에서는 func() 함수 내부에서 local_var이라는 이름의 지역 변수를 선언하고 사용하고 있습니다.

하지만 7번 라인의 주석 처리를 해제하고 함수 밖에서 함수 내에 선언된 지역 변수에 접근하려고 하면 NameError가 발생하는 것을 확인할 수 있습니다.

 

함수 내부에서 선언된 지역 변수는 함수의 호출이 끝남과 동시에 소멸되므로, 함수 밖에서 접근하려고 하면 선언되지 않은 변수에 접근하는 것으로 인식하여 오류가 발생하는 것입니다. 함수의 매개변수 또한 함수 내부에서 정의되는 지역 변수로 취급됩니다.


전역 변수(global variable)

파이썬에서 전역 변수(global variable)란 함수 외부에서 선언된 변수를 의미합니다.

이렇게 함수 외부에서 선언된 전역 변수는 함수 외부에서는 당연히 접근할 수 있으며, 모든 함수에서 global 키워드로 재선언하면 접근할 수 있게 됩니다.

예제

def func():

    global global_var

    local_var = "지역 변수"

    print(local_var)

    print(global_var)    

 

 

global_var = "전역 변수"

func()

print(global_var)

코딩연습 ▶

실행 결과

지역 변수
전역 변수
전역 변수

 

위 예제의 5번 라인처럼 함수 내부에서 전역 변수를 사용하기 위해서는 반드시 2번 라인처럼 global 키워드를 사용하여 해당 전역 변수를 재선언해야 합니다.

 

만약 함수 외부에서 선언된 전역 변수와 함수 내부에서 선언된 지역 변수의 이름이 같은 경우에는 다음 예제와 같이 global 키워드를 사용하지 않으면 전혀 별개의 변수로 취급되므로 주의해야 합니다.

예제

def func():

    var = "지역 변수"

    print(var)    

 

 

var = "전역 변수"

print(var)

func()

print(var)

코딩연습 ▶

실행 결과

전역 변수
지역 변수
전역 변수

 

위 예제의 2번 라인은 전역 변수 var에 대입 연산을 하는 것이 아니라 새로운 지역 변수인 var를 선언하는 것으로 인식됩니다. 따라서 9번 라인에서 전역 변수 var의 값이 변하지 않았음을 확인할 수 있습니다.

 

다음 예제의 3번 라인처럼 global 키워드를 사용해야만 지역 변수의 선언이 아닌 전역 변수의 값을 변경하는 구문으로 제대로 동작할 수 있습니다.

예제

def func():

    global var

    var = "지역 변수"

    print(var)    

 

 

var = "전역 변수"

print(var)

func()

print(var)

코딩연습 ▶

실행 결과

전역 변수
지역 변수
지역 변수

 

10번 라인에서 전역 변수 var의 출력 결과가 “전역 변수”에서 “지역 변수”로 변경된 것을 확인할 수 있습니다.

 

위의 예제처럼 전역 변수의 값을 함수 내부에서 변경하는 것은 그리 좋은 방법이 아닙니다. 이러한 행위는 해당 전역 변수를 사용하는 다른 함수의 동작을 의도치 않게 바꾸는 결과를 초래할 수 있으므로, 변수의 유효 범위를 이해하는 용도로만 사용하시길 바랍니다.

지역 변수 vs 전역 변수

그렇다면 변수를 선언할 때 지역 변수와 전역 변수 중 어떤 변수로 선언해야 좋을지 고민될 수 있습니다.

둘 중 어떤 변수를 사용하는 것이 더 좋다고 딱 잘라 말할 수는 없으며, 해당 변수가 사용되는 목적에 따라 구분해서 사용할 필요가 있습니다.

 

즉, 프로그램이 실행되는 내내 변하지 않아야 하거나 여러 함수에서 함께 사용하는 값들은 전역 변수로 선언하는 것이 좋으며, 특정 함수에서만 사용되는 값들은 지역 변수로 선언하는 것이 좋습니다.


연습문제