내 변수는 어디서 살고 어디서 죽을까? 변수 스코프(Scope) 완벽 정리
지역 변수 vs 전역 변수: 변수의 '활동 범위' 이해하기
내 변수는 어디서 살고 어디서 죽을까? 변수 스코프(Scope) 완벽 정리
안녕하세요! 11일차에 함수를 배우면서 이런 경험 없으셨나요? "어? 함수 안에서 만든 변수를 밖에서 썼더니 에러가 나요!" 혹은 "밖에서 만든 변수를 함수 안에서 바꿨는데 안 바뀌어요!"
오늘은 변수가 프로그램 어디까지 영향을 미치는지 결정하는 지역 변수(Local)와 전역 변수(Global)의 개념을 확실히 잡아보겠습니다.
1. 우리 집 안에서만! 지역 변수
함수 안에서 만들어진 변수는 지역 변수라고 합니다. 이 변수는 함수라는 '집' 안에서만 살 수 있고, 함수가 끝나면 흔적도 없이 사라집니다.
def my_house():
inner_var = "함수 안의 보물"
print(inner_var)
my_house()
# print(inner_var) <- 에러 발생! (밖에서는 볼 수 없어요)
2. 마을 전체의 공유 재산, 전역 변수
함수 밖에서 만들어진 변수는 전역 변수입니다. 프로그램 전체에서 누구나 읽을 수 있는 공용 변수와 같습니다.
global_var = "나는 공용 변수"
def check_global():
print(global_var) # 밖에서 만든 걸 안에서도 읽을 수 있어요.
check_global()
print(global_var)
3. 주의! 함수 안에서 전역 변수 수정하기
기본적으로 함수는 밖의 전역 변수를 '읽기'만 할 수 있습니다. 만약 함수 안에서 전역 변수의 값을 직접 바꾸고 싶다면 global이라는 키워드를 써서 파이썬에게 허락을 받아야 합니다.
1. 함수 내부 맨 윗줄에
global 변수명을 선언합니다.2. 이제 함수 안에서의 수정이 함수 밖 전역 변수에도 반영됩니다.
count = 0
def increment():
global count # "밖의 count를 가져다 쓰겠다!"고 선언
count += 1
print("함수 안 count:", count)
increment()
print("함수 밖 count:", count) # 결과: 1 (값이 변했습니다!)
지역/전역 변수 = 집/마을 지도에서 어디까지 "살아있나"
(집에서도 “읽기” 가능)
temp = 123
(집 A/B 둘 다 접근 가능)
temp = 999
💡 12일차 궁금증 해결 (Q&A)
Q1. global은 많이 쓸수록 좋은가요?
A1. 아니요! 가급적 피하는 것이 좋습니다. 프로그램 규모가 커지면 어디서 전역 변수를 바꿨는지 찾기 힘들어져 오류의 주범이 되기 때문입니다. 가급적 함수에서 return으로 값을 돌려받아 사용하는 습관을 들이세요.
Q2. 지역 변수와 전역 변수 이름이 같으면 어떻게 되나요?
A2. 파이썬은 지역 변수를 우선시합니다. 함수 안에서는 함수 안의 변수 이름을 먼저 찾고, 없으면 밖에서 찾습니다. 하지만 헷갈리지 않게 이름을 다르게 짓는 것이 가장 좋습니다.
Q3. 왜 변수가 함수가 끝나면 사라지나요?
A3. 컴퓨터의 메모리를 효율적으로 쓰기 위해서입니다. 다 쓴 변수를 계속 갖고 있으면 프로그램이 점점 무거워지겠죠? 함수가 자기 할 일을 다 하면 청소부(가비지 컬렉터)가 나타나 깔끔하게 치워줍니다.
오늘의 미션 🚩
"로그인 횟수 제한기"
1. 전역 변수 fail_count = 0을 만드세요.
2. login() 함수를 만들고, 실행할 때마다 fail_count를 1씩 증가시키세요.
3. 함수 마지막에 "현재 로그인 실패 횟수: X"를 출력하게 해보세요. (global 키워드 활용!)

댓글
댓글 쓰기