본문 바로가기
Language/Python

[고등학생부터, 파이썬] 15. 지역변수와 전역변수

by kellis 2026. 8. 28.
반응형
고등학생부터, 파이썬 · 15화

지역변수와 전역변수 

함수 안에서 만든 변수와 함수 밖에서 만든 변수는 사용할 수 있는 범위가 다릅니다. 지역변수와 전역변수가 무엇인지, 왜 나눠서 쓰는지, 그리고 같은 이름을 써도 서로 다른 변수가 되는 이유까지 정리해요.

이 시리즈를 시작하며

요즘은 고등학교에서도 코딩을 정규 과목으로 가르치는 시대입니다. 전공자가 아니어도 바이브 코딩(Vibe Coding)이나 생성형 AI(Generative AI)를 활용하면 누구나 그럴듯한 코드 결과물을 만들어낼 수 있게 되었죠. 

개발 언어를 접하는, 전공자가 아닌 일반인 입문자가 많아진 것입니다.

이 시리즈는 글쓴이가 실제로 일반인, 고등학생 등 비전공자·입문자에게 파이썬을 가르치면서 정리한 내용들을 교재 형식으로 엮은 글입니다.최대한 쉽고 친절하게 설명하면서도, 컴퓨터와 프로그래밍 언어에 대한 기초 이론까지 함께 짚고 넘어가려 합니다.

 

고등학생, 비전공자, 완전 입문자도 따라올 수 있게끔 만든 시리즈이고, 실제 과외 수업 자료를 바탕으로 만들어서 학교 시험처럼 개념 확인 문제도 그대로 들어있어요.

중간중간 빈칸 채우기학교 시험 유형 문제가 나오는데, 정답은 바로 안 보이게 접어뒀습니다. 먼저 스스로 생각해본 다음 "보기"를 눌러서 확인해보세요.

Chapter 34
지역변수(Local)와 전역변수(Global)

함수 밖에서 만들 수도 있고, 함수 안에서 만들 수도 있습니다. 이 둘은 사용할 수 있는 범위가 다릅니다.

1. 전역변수(Global Variable) — 함수 밖에서 만든 변수
python
name = "홍길동"

def hello():
    print(name)

hello()
실행 결과
홍길동

전역변수는 프로그램 어디에서나 사용할 수 있습니다. 함수 안에서도 문제없이 꺼내 쓸 수 있어요.

2. 지역변수(Local Variable) — 함수 안에서 만든 변수
python
def hello():
    age = 17
    print(age)

hello()
실행 결과
17

여기서 print(age)를 함수 에서 하면 어떻게 될까요?

python
def hello():
    age = 17

hello()

print(age)
실행 결과
NameError: name 'age' is not defined

왜 오류가 날까요? age함수 안에서만 존재하는 변수이기 때문입니다. 함수가 실행을 마치고 나면, 그 안에서 만들어진 지역변수는 사라집니다.

바구니로 비유하면

전역변수는 교실 전체에 놓인 바구니라서 누구나(어떤 함수든) 꺼내 쓸 수 있습니다. 지역변수는 함수라는 자기 방 안에만 놓인 바구니라서, 그 함수를 벗어나면 존재 자체가 사라져요. 방 밖에서 그 바구니를 찾으면 "그런 바구니 없다"는 뜻의 NameError가 나는 것입니다.

같은 이름을 써도 서로 다른 변수
python
name = "철수"

def hello():
    name = "영희"
    print(name)

hello()

print(name)
실행 결과
영희
철수
이름은 같은데 다른 변수

함수 안의 name과 함수 밖의 name이름만 같을 뿐 완전히 다른 변수입니다. hello() 안에서 name = "영희"라고 해도, 함수 밖의 name("철수")은 전혀 바뀌지 않아요. 함수는 자기만의 독립된 방을 가지고 있어서, 그 안에서 무슨 이름을 쓰든 바깥 방과는 섞이지 않습니다. 단, 같은 방 안에서는 하나의 이름으로 하나의 변수만 만들 수 있습니다. 

왜 지역변수를 사용할까?
python
def add(a, b):
    result = a + b
    return result

여기서 result는 계산할 때만 잠깐 필요한 변수입니다. 함수가 끝나면 자동으로 사라지고, 굳이 프로그램 전체에서 계속 남아있을 필요가 없어요. 이렇게 그 함수 안에서만 쓰고 버릴 값이라면 지역변수로 만드는 게 자연스럽습니다.

전역변수는 언제 사용할까?
python
school = "한빛고"

def student():
    print(school)

def teacher():
    print(school)

student()
teacher()
실행 결과
한빛고
한빛고

여러 함수에서 같이 사용할 값이라면 전역변수가 편리합니다. student()와 teacher() 둘 다 school을 따로 전달받지 않아도 그대로 사용할 수 있어요.

자주 하는 실수 세 가지

① 지역변수를 함수 밖에서 사용def test(): num = 10 다음에 함수 밖에서 print(num)을 하면 오류가 납니다.

② 같은 변수라고 착각 — 함수 밖의 score = 100과 함수 안의 score = 50은 이름만 같을 뿐 서로 다른 변수입니다.

③ 모든 변수를 전역으로 만들기 — 가능은 하지만 좋은 습관이 아닙니다. 그 함수 안에서만 필요한 값은 지역변수로 만드는 것이 코드를 훨씬 깔끔하게 만듭니다.

빈칸 채우기
  1. 함수 안에서 만든 변수를 무엇이라고 하는가?
  2. 함수 밖에서 만든 변수를 무엇이라고 하는가?
정답
1. 지역변수(Local Variable)
2. 전역변수(Global Variable)
학교 시험 유형
  1. 다음 코드의 실행 결과를 작성하시오.
    python
    num = 5

    def show():
        num = 10
        print(num)

    show()
    print(num)
  2. 지역변수를 함수 밖에서 사용하면 어떤 오류가 발생하는지, 그 이유와 함께 서술하시오.
정답
1. 10
5

2. NameError가 발생합니다. 지역변수는 함수가 실행되는 동안에만 존재하고, 함수 실행이 끝나면 사라지기 때문에 함수 밖에서는 그 변수를 찾을 수 없습니다.
다음 화 예고 — 16화에서는 지금까지 배운 함수·딕셔너리·반복문을 모두 모아서, 하나로 길게 이어져 있던 코드를 기능별로 나눠 정리하는 도서 관리 프로그램 리팩터링 실습을 해볼게요.

 

반응형

댓글