Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python 전역 변수와 지역 변수 완벽 가이드: 개념부터 활용법까지

변수는 프로그래밍에서 가장 중요하고 널리 사용되는 개념입니다. 변수는 데이터를 저장하는 그릇 역할을 하며, 사용자 이름, 이메일 주소, 온라인 게임 인벤토리의 아이템 등 다양한 종류의 데이터를 담을 수 있습니다.

Python으로 프로그래밍할 때 마주하게 되는 변수는 크게 두 가지로 나뉩니다. 바로 전역 변수(global variable)지역 변수(local variable)입니다. 이 가이드에서는 두 변수의 차이점, 작동 원리, 그리고 코드에서 활용하는 방법까지 자세히 살펴보겠습니다.

Python 변수란 무엇인가?

Python에서 변수는 데이터에 이름표를 붙여 저장하는 역할을 합니다. 변수를 정의할 때 이름을 지정하면, 이후 코드 어디서든 그 이름을 통해 해당 데이터를 불러와 사용할 수 있습니다. 변수에는 문자열, 숫자, 리스트 등 어떤 데이터 타입이든 저장할 수 있습니다.

예를 들어 게임을 개발하면서 사용자의 이름을 저장해야 한다고 가정해 봅시다. 프로그램 곳곳에 이름을 일일이 입력하는 대신, 변수 하나에 저장해두면 훨씬 효율적입니다.

다음은 게임 사용자의 이름을 저장하는 변수의 예시입니다.

name = "Carlton Hernandez"

위 코드에서는 name이라는 변수를 선언하고 "Carlton Hernandez"라는 값을 할당했습니다.

변수를 선언한 후에는 코드 안에서 자유롭게 조작할 수 있습니다. 예를 들어 사용자의 이름을 변경하고 싶다면 다음과 같이 작성하면 됩니다.

name = "Carlton Hernandez"
name = "Carlton Lewis Hernandez"

첫 번째 줄에서 name 변수에 "Carlton Hernandez"를 할당했고, 두 번째 줄에서 같은 변수에 "Carlton Lewis Hernandez"를 새로 할당했습니다. 변수에 새 값을 할당하면 프로그램은 기존 값을 덮어쓰고 새 값으로 교체합니다.

Python 전역 변수(Global Variables)

Python의 변수는 크게 지역 변수와 전역 변수 두 가지 유형으로 구분됩니다.

전역 변수는 함수 외부에서 선언된 변수로, 전역 범위(global scope)를 가집니다. 즉, 프로그램 전체 어디에서든 접근할 수 있으며 함수 내부에서도 사용 가능합니다. 다음 그림은 이 개념을 시각적으로 보여줍니다.

Python의 전역 변수와 지역 변수

Python 전역 변수와 지역 변수 완벽 가이드: 개념부터 활용법까지

전역 변수는 프로그램 전체에서 접근할 수 있습니다.

다음은 Python에서 전역 변수를 선언하는 예시입니다.

name = "Carlton Hernandez"

전역 변수를 한 번 선언하면 코드 전체에서 사용할 수 있습니다. 예를 들어 전역 변수 name의 값을 출력하는 함수를 다음과 같이 만들 수 있습니다.

def printName():
	print(name)

printName()

실행 결과:

"Carlton Hernandez"

위 코드에서는 printName()이라는 함수를 정의했습니다. 이 함수가 호출되면 name 변수의 값을 콘솔에 출력합니다. 실제로 함수를 호출했을 때 전역 변수의 값이 정상적으로 출력된 것을 확인할 수 있습니다.

Python 지역 변수(Local Variables)

반면 지역 변수는 함수 내부에서 선언된 변수입니다. 지역 변수는 지역 범위(local scope)를 가지며, 선언된 함수 내부에서만 접근할 수 있습니다. 앞서 살펴본 그림을 다시 참고해 보겠습니다.

전역 변수와 지역 변수

Python 전역 변수와 지역 변수 완벽 가이드: 개념부터 활용법까지

지역 변수는 특정 함수 내부에서만 접근할 수 있습니다.

다음은 지역 변수를 사용하는 프로그램의 예시입니다.

def printName():
	name = "Georgia Anderson"
	print(name)

printName()

실행 결과:

"Georgia Anderson"

위 코드에서는 printName() 함수를 선언하고, 그 내부에 name이라는 변수를 정의했습니다. 함수 안에서 선언되었기 때문에 이 변수는 지역 변수입니다.

코드 마지막에서 printName()으로 함수를 호출하자 프로그램은 해당 함수를 실행하고 지역 변수의 값을 출력했습니다.

이 예제의 name 변수는 printName() 함수에 국한된 지역 변수이므로, 함수 외부에서는 접근할 수 없습니다. 만약 함수 밖에서 이 지역 변수를 출력하려고 하면 어떻게 될까요?

def printName():
	name = "Georgia Anderson"
	print(name)

printName()
print(name)

실행 결과:

NameError: name 'name' is not defined

지역 변수는 선언된 함수 외부에서 접근할 수 없습니다. 메인 프로그램에서 지역 변수에 접근하려고 하면 위와 같이 NameError 오류가 발생합니다.

전역 변수와 지역 변수 함께 사용하기

프로그램에서 동일한 이름의 변수를 지역 변수와 전역 변수로 동시에 사용하는 것도 가능합니다. 이 경우 지역 범위에서는 지역 변수가, 전역 범위에서는 전역 변수가 읽힙니다.

다음은 이름이 같은 지역 변수와 전역 변수를 사용하는 프로그램의 예시입니다.

score = 5

def calculateScore():
	score = 10
	print("Final Score:", score)

calculateScore()
print("Initial Score:", score)

실행 결과:

Final Score: 10
Initial Score: 5

먼저 코드 상단에서 전역 변수 score에 5를 할당했습니다. 그다음 calculateScore() 함수 내부에 같은 이름의 지역 변수를 만들었습니다.

calculateScore() 함수 내부의 지역 변수 score 값은 10입니다. 따라서 함수를 호출하면 Final Score: 10이 콘솔에 출력됩니다.

반면 함수 외부에서 score 변수의 값은 여전히 5입니다. 전역 범위에서 score를 5로 설정했기 때문입니다. 그래서 Initial Score:와 함께 score 변수를 출력하면 5가 표시됩니다.

함수 내부에서 전역 변수 선언하기: global 키워드

지금까지 전역 변수는 함수 외부에서(즉, 전역적으로) 정의되고, 지역 변수는 함수 내부에서(즉, 지역적으로) 정의된다는 것을 배웠습니다. 하지만 global 키워드를 사용하면 함수 내부에서 변수를 정의하더라도 전역 변수로 만들 수 있습니다.

다음 예시를 살펴보겠습니다.

def setName():
	global name
	name = "Bianca Peterson"

setName()
print(name)

실행 결과:

"Bianca Peterson"

위 코드에서는 setName() 함수 내부에서 name 변수에 값을 할당했습니다. 하지만 변수를 정의하기 전에 global 키워드를 사용했기 때문에, name 변수는 전역 범위를 갖도록 준비됩니다. 단, name 변수가 실제로 전역 변수가 되는 시점은 프로그램에서 이 함수를 실행한 이후입니다.

프로그램이 setName() 함수를 실행한 후에는 코드 어디에서 name 변수를 사용하든(예: print() 함수 호출 시), 지역 함수에서 선언한 값이 적용됩니다. 이제 name 변수가 전역 변수이기 때문입니다.

앞서 함수 내부에서는 전역 변수를 직접 변경할 수 없다고 언급했습니다. 이것은 사실입니다. 하지만 global 키워드를 사용하면 함수 내부에서 간접적으로 전역 변수의 값을 변경할 수 있습니다.

다음은 함수 안에서 global 키워드를 사용해 전역 변수의 값을 변경하는 프로그램의 예시입니다.

name = "Bianca Peterson"

def setName():
	global name
	name = "Bianca Lucinda Peterson"

setName()
print(name)

실행 결과:

"Bianca Lucinda Peterson"

코드를 단계별로 분석해 보겠습니다. 먼저 name 변수를 선언하고 "Bianca Peterson"을 할당했습니다. 이것은 전역 변수입니다. 그다음 setName() 함수를 선언했는데, 이 함수가 호출되면 name 변수의 값을 변경합니다.

이후 setName() 함수를 호출하자 name의 값이 "Bianca Lucinda Peterson"으로 변경되었고, 마지막으로 print()로 그 값을 콘솔에 출력했습니다. 이제 전역 변수 name의 값은 "Bianca Lucinda Peterson"입니다.

참고로 global 키워드는 필요한 경우에만 절제해서 사용하는 것이 좋습니다. 남용하면 프로그램 내 변수의 범위를 파악하기 어려워져 코드 가독성과 유지보수성이 떨어질 수 있습니다.

마무리

정리하면, 전역 변수는 함수 외부에서 선언된 변수이고, 지역 변수는 함수 내부에서 선언된 변수입니다.

전역 변수는 함수 내부에서 직접 변경할 수 없지만, global 키워드를 활용하면 전역 변수의 값을 변경하는 함수를 만들 수 있습니다. 이때 전역 변수의 값은 해당 함수를 실제로 실행해야만 변경됩니다.

이 튜토리얼에서는 예제와 함께 지역 변수와 전역 변수의 기본 개념과 작동 방식을 살펴보았습니다. 이제 여러분도 전문 개발자처럼 Python 코드에서 지역 변수와 전역 변수를 자유롭게 활용할 준비가 되었습니다!