지역변수는 함수 내부에서만 사용되는 변수입니다. 함수가 호출되는 동안에만 효력을 발휘하고 함수가 끝나는 동시에 소멸됩니다. 전역변수는 프로그램 어디에서나 접근이 가능한 변수이며 함수 내에서 global를 입력하면 전역변수가 됩니다.
지역변수와 전역변수를 왜 나누어 놓았나요?
예를 들어 휴대폰 제조회사에 들어가 휴대폰 앱을 개발하는 업무를 하게 되었다고 가정해 보겠습니다. A라는 사람은 카메라 앱을 개발하는데 x라는 변수를 사용하고 B라는 사람은 음악감상 앱을 개발하는데 변수 x를 사용하는데 이 변수를 자신이 만든 프로그램이 아닌 다른 프로그램에서 조작이 되어진다면 프로그램을 만드는 과정에서 혼선이 생길 수 있어요. 따라서 이러한 혼선을 막기 위해서 프로그래밍 언어에서는 함수 내에서 선언된 변수와 구현 내용을 외부에서 만지지 못하도록 지원하고 있어요.
입력1(ERROR)
# global 사용전
a = 100
def f():
a = a + 1
f()
입력2
# global 사용후
a = 100
def f():
global a
a = a + 1
f()
함수 안에서 함수 밖에 있는 함수를 만지지 못합니다. 이를 위해 global이라는 함수를 사용하여 모든 함수에서 사용 가능하도록 만들 수 있어요. 그러나 프로그래밍에서 전역변수는 권장하지 않습니다. 연산을 하고 싶다면 함수에 아규먼트(함수의 input)를 대입하여 return으로 받는게 객체 지향 프로그래밍에 적합합니다.
조금 다른 예제를 살펴보도록 할께요. 아래 값을 실행해보세요.
x = 10
def addx():
global x
x = x + 1
return x
result = addx()
print("result : " , result)
result : 11
이번에는 global을 지우고 아래처럼 대입받는 변수를 a로 변경해 보도록 하겠습니다. 정상적으로 실행이 되죠? global 변수를 쓰지 않더라도 외부 변수에 접근하는 것은 가능합니다. 변경이 불가능한 것이죠.