Python

3.3 지역변수, 전역변수

수현조 2024. 11. 29. 09:26

변수는 우리가 정보를 저장하는 **"이름표"**라고 생각하면 됩니다.

그런데 이 이름표가 어디서 유효한지, 즉 어디에서 쓸 수 있는지가 지역변수전역변수의 차이입니다.


 

1. 지역변수(Local Variable)란?

🏡  지역변수는 함수 안에서만 사용하는 개인 이름표!

  • 함수 안에서 만들어진 변수입니다.
  • 함수가 실행되는 동안에만 유효하고, 함수가 끝나면 사라집니다.
  • 함수 밖에서는 볼 수도, 사용할 수도 없습니다.

📦  예를 들어:

def greet():
    name = "Alice"  # 지역변수
    print(f"Hello, {name}")  # 함수 안에서만 사용 가능

greet()

# print(name)  # 오류! name은 함수 밖에서 사용할 수 없어요.

📝  쉽게 생각하면:

  • 지역변수는 함수의 개인 메모장 같은 거예요. 함수가 끝나면 메모장도 없어져요!

2. 전역변수(Global Variable)란?

🌍  전역변수는 프로그램 어디서나 사용할 수 있는 공용 이름표!

  • 함수 밖에서 만들어진 변수입니다.
  • 프로그램이 실행되는 동안 계속 살아 있고, 함수 안에서도 사용할 수 있습니다.

📦  예를 들어:

greeting = "Hello"  # 전역변수

def greet():
    print(greeting)  # 함수 안에서도 전역변수를 사용할 수 있어요!

greet()
print(greeting)  # 함수 밖에서도 당연히 사용할 수 있어요.

📝  쉽게 생각하면:

  • 전역변수는 공용 공책이에요. 프로그램 어디서든 꺼내 볼 수 있어요!

3.  전역변수를 함수 안에서 바꾸려면?

🚨 주의: 그냥 사용하면 안 됩니다!

  • 함수 안에서 전역변수의 값을 바꾸려면, global 키워드를 써야 합니다.
  • 그렇지 않으면 함수는 새로운 지역변수를 만들어 버립니다.

📦  예를 들어:

count = 0  # 전역변수

def increment():
    global count  # 전역변수를 수정하려면 global을 사용해야 해요.
    count += 1

increment()
print(count)  # 1

4. 지역변수와 전역변수 비교

📝 특징 지역변수 전역변수

만드는 위치 함수 안 함수 밖
사용 가능한 범위 함수 안에서만 프로그램 어디서나
생명 주기 함수 실행 중 프로그램 실행 중
함수 안에서 수정 자유롭게 수정 가능 global 키워드가 필요

5. 더 쉽게 이해하기: 방과 도서관 비유

  1. 지역변수는 방 안에서만 쓸 수 있는 물건:
    • 방 안(함수)에서만 보이고 사용할 수 있어요.
    • 방 밖(함수 밖)에서는 보이지 않아요.
  2. 전역변수는 도서관에 있는 공용 책:
    • 방 안에서도(함수 안에서도) 꺼내 볼 수 있고,
    • 방 밖에서도(함수 밖에서도) 꺼내 볼 수 있어요.

6. 왜 지역변수와 전역변수를 나눌까?

  1. 지역변수:
    • 함수를 실행할 때만 잠깐 필요한 정보라면 지역변수가 더 좋아요.
    • 다른 함수에 영향을 주지 않으니까 안전해요!
  2. 전역변수:
    • 여러 함수에서 공유해야 하는 정보라면 전역변수를 사용할 수 있어요.
    • 하지만 너무 많이 쓰면 복잡해지고, 예상치 못한 오류가 생길 수 있어요.

7. 지역변수와 전역변수를 함께 사용하는 예제

📦 코드:

message = "전역 변수"  # 전역변수

def change_message():
    global message  # 전역변수 수정
    message = "지역에서 바꾼 전역 변수"
    print("함수 내부:", message)

change_message()
print("함수 외부:", message)

💡 출력:

함수 내부: 지역에서 바꾼 전역 변수
함수 외부: 지역에서 바꾼 전역 변수

8. 정리

  • 지역변수: 함수 내부에서만 사용하는 개인 이름표.
  • 전역변수: 프로그램 전체에서 사용할 수 있는 공용 이름표.
  • 전역변수를 함수에서 바꾸려면 global 키워드가 필요해요.