
파이썬을 오랜만에 다시 공부하면서 변수는 분명 익숙한데, 막상 “변수가 정확히 뭐지?”라고 물으면 잠깐 멈추게 됐습니다. 보통 변수를 값을 담는 상자라고 배우지만, 파이썬에서는 값에 붙이는 이름표라고 생각하면 훨씬 자연스럽습니다.
지난 글에서 print(), 주석, 들여쓰기와 코드 실행 순서를 살펴봤습니다. 이번에는 출력할 값에 이름을 붙이고, 필요할 때 다시 꺼내 쓰는 방법을 알아보겠습니다.
변수는 왜 필요할까?
카페에서 아메리카노 한 잔의 가격이 4,500원이라고 생각해 보겠습니다.
print(4500)
print(4500 * 2)
print(4500 * 3)
코드는 실행되지만 4500이 무엇을 뜻하는지 바로 알기 어렵습니다. 가격이 5,000원으로 바뀌면 여러 곳을 찾아 모두 고쳐야 합니다.
값에 이름을 붙이면 이야기가 달라집니다.
coffee_price = 4500
print(coffee_price)
print(coffee_price * 2)
print(coffee_price * 3)
coffee_price라는 이름만 보고도 커피 가격이라는 뜻을 짐작할 수 있습니다. 가격이 바뀌어도 첫 줄만 수정하면 됩니다. 변수는 단순히 값을 기억하는 기능을 넘어 숫자와 글자에 의미를 붙이고, 변경할 곳을 줄이는 도구입니다.
첫 변수 만들기
변수를 만드는 가장 기본적인 모양은 다음과 같습니다.
coffee_price = 4500
이 한 줄을 세 부분으로 나누어 보겠습니다.
coffee_price: 값에 붙인 이름입니다.=: 오른쪽 값을 왼쪽 이름에 연결합니다.4500: 이름으로 기억할 값입니다.
파이썬은 먼저 오른쪽의 4500을 준비하고, 그 값을 coffee_price라는 이름으로 가리키게 합니다. 이 과정을 대입 또는 바인딩이라고 부릅니다.
coffee_price = 4500
print(coffee_price)
4500
print(coffee_price)라고 쓰면 파이썬은 coffee_price가 가리키는 값을 찾아 출력합니다. 따옴표를 붙이면 결과가 달라집니다.
print(coffee_price)
print("coffee_price")
4500
coffee_price
따옴표가 없는 coffee_price는 변수 이름이고, 따옴표로 감싼 "coffee_price"는 그대로 출력할 글자입니다.
등호는 같다는 뜻이 아니다
수학에서 =는 왼쪽과 오른쪽이 같다는 뜻입니다. 하지만 대입문에서의 =는 오른쪽 값을 왼쪽 이름에 연결하라는 동작에 가깝습니다.
score = 70
score = score + 10
print(score)
80
score = score + 10은 수학식으로 보면 이상해 보입니다. 하지만 파이썬은 다음 순서로 움직입니다.
- 오른쪽의 기존
score값을 찾습니다. 현재 값은70입니다. 70 + 10을 계산해80을 만듭니다.score라는 이름을 새 값80에 다시 연결합니다.
왼쪽과 오른쪽을 동시에 비교하는 것이 아니라, 오른쪽을 먼저 계산한 뒤 왼쪽 이름표를 옮기는 것입니다. 두 값이 같은지 비교할 때 사용하는 ==는 연산자를 다루는 글에서 자세히 살펴보겠습니다.
변수는 상자보다 이름표에 가깝다
처음에는 변수를 상자라고 생각해도 충분합니다. 다만 파이썬의 동작을 조금 더 정확히 이해하려면 물건에 붙인 이름표를 떠올리는 편이 좋습니다.
favorite_menu = "김밥"
lunch_menu = favorite_menu
print(favorite_menu)
print(lunch_menu)
김밥
김밥
먼저 "김밥"이라는 값에 favorite_menu라는 이름을 붙였습니다. 다음 줄에서는 lunch_menu도 같은 값을 가리키게 했습니다. 값이 두 상자에 복사됐다기보다 하나의 값에 두 이름표가 연결된 모습에 가깝습니다.
이 차이는 나중에 리스트처럼 내용이 바뀔 수 있는 자료를 배울 때 중요해집니다. 지금은 변수 자체가 값이라기보다 값을 찾아가기 위한 이름이라는 점만 기억하면 충분합니다.
재대입하면 이전 값은 어떻게 될까?
변수에는 새로운 값을 다시 대입할 수 있습니다.
weather = "맑음"
print(weather)
weather = "비"
print(weather)
맑음
비
두 번째 대입이 실행되면 weather라는 이름표가 "맑음"에서 "비"로 옮겨 갑니다. 그래서 이후에 weather를 사용하면 새 값이 나옵니다.
변경 전 값도 필요하다면 다른 이름으로 먼저 기억해 둘 수 있습니다.
previous_weather = "맑음"
current_weather = "비"
print("이전 날씨:", previous_weather)
print("현재 날씨:", current_weather)
이름을 나누면 두 값의 역할도 함께 드러납니다.
변수 이름을 만드는 규칙
변수 이름은 자유롭게 정할 수 있지만 기본 규칙이 있습니다.
사용할 수 있는 이름
영문자, 숫자, 밑줄 _을 조합할 수 있으며 숫자로 시작할 수는 없습니다.
menu = "김밥"
menu2 = "라면"
coffee_price = 4500
_temporary = "임시 값"
파이썬은 대소문자를 구분하므로 price, Price, PRICE는 서로 다른 이름입니다.
사용할 수 없는 이름
# 숫자로 시작할 수 없습니다.
2nd_menu = "라면"
# 이름 중간에 공백을 넣을 수 없습니다.
coffee price = 4500
# 하이픈은 변수 이름의 문자가 아닙니다.
coffee-price = 4500
if, for, class처럼 파이썬이 문법을 위해 미리 사용하고 있는 키워드도 변수 이름으로 쓸 수 없습니다.
# 잘못된 예
class = "파이썬 수업"
규칙에 맞지 않는 이름은 코드가 실행되기 전에 SyntaxError를 발생시킵니다.
좋은 변수 이름은 작은 설명서다
다음 두 코드는 같은 계산을 합니다.
a = 4500
b = 2
c = a * b
coffee_price = 4500
cup_count = 2
total_price = coffee_price * cup_count
두 번째 코드는 주석이 없어도 한 잔 가격과 수량을 곱해 총금액을 구한다는 사실이 보입니다. 좋은 변수 이름은 코드를 읽는 사람에게 건네는 작은 설명서입니다.
이름을 지을 때 확인할 것
- 값의 역할이 드러나는가?
- 너무 짧거나 모호하지 않은가?
- 여러 단어는 밑줄로 구분했는가?
- 단위가 중요하다면 이름에 포함했는가?
예를 들어 time = 30보다 waiting_minutes = 30이 더 분명합니다. 숫자 30이 30초인지, 30분인지, 어느 시각인지 고민하지 않아도 됩니다.
파이썬에서는 여러 단어로 된 변수 이름을 보통 total_price, user_name처럼 소문자와 밑줄로 작성합니다. 이를 스네이크 케이스라고 부릅니다.
변수를 만들기 전에 사용하면 어떻게 될까?
파이썬은 이름을 사용하면 그 이름이 가리키는 값을 찾습니다. 아직 대입하지 않은 이름은 찾을 수 없습니다.
print(snack_price)
NameError: name 'snack_price' is not defined
NameError는 파이썬이 해당 이름을 찾지 못했다는 뜻입니다. 이 오류가 나타나면 다음 세 가지를 확인하면 됩니다.
- 사용하기 전에 값을 대입했는가?
- 변수 이름의 철자가 같은가?
- 대소문자를 똑같이 작성했는가?
snack_price = 1500
print(snack_price)
코드는 위에서 아래로 실행되므로 이름을 만든 줄이 사용하는 줄보다 먼저 와야 합니다.
변수에 어떤 값이 들어갈 수 있을까?
변수에는 숫자와 글자뿐 아니라 참·거짓 같은 여러 종류의 값을 연결할 수 있습니다.
age = 20
temperature = 23.5
name = "민지"
is_student = True
파이썬에서는 변수 이름에 종류가 고정되는 것이 아니라, 그 이름이 현재 가리키는 객체에 종류가 있습니다.
value = 10
print(value)
value = "열"
print(value)
문법상 가능하지만 한 이름의 의미가 갑자기 바뀌면 읽는 사람이 혼란스러울 수 있습니다. 특별한 이유가 없다면 같은 변수는 비슷한 역할의 값을 가리키게 하는 편이 좋습니다. 숫자, 실수, 문자열, 불리언이 어떻게 다른지는 다음 글에서 하나씩 살펴보겠습니다.
작은 카페 주문 프로그램 만들기
지금까지 배운 변수와 print()를 연결해 보겠습니다.
menu_name = "아메리카노"
unit_price = 4500
order_count = 2
total_price = unit_price * order_count
print("메뉴:", menu_name)
print("한 잔 가격:", unit_price, "원")
print("주문 수량:", order_count, "잔")
print("결제 금액:", total_price, "원")
메뉴: 아메리카노
한 잔 가격: 4500 원
주문 수량: 2 잔
결제 금액: 9000 원
프로그램의 흐름을 따라가면 어렵지 않습니다.
- 메뉴 이름, 가격, 수량에 각각 알아보기 쉬운 이름을 붙입니다.
- 오른쪽에서
unit_price * order_count를 먼저 계산합니다. - 계산 결과를
total_price라는 이름으로 기억합니다. - 지난 글에서 배운
print()로 각 값을 확인합니다.
가격이나 수량을 바꿔 다시 실행해 보세요. 같은 코드가 새로운 결제 금액을 계산합니다. 변수를 쓰는 이유가 가장 선명하게 느껴지는 순간입니다.
직접 바꿔 보며 확인하기
다음 문제를 직접 작성해 보세요.
- 좋아하는 음식의 이름과 가격을 각각 변수에 저장해 출력합니다.
- 영화표 가격과 인원수를 변수로 만들고 총금액을 계산합니다.
score = score + 5가 실행되는 순서를 말로 설명해 봅니다.a,b처럼 짧은 이름을 역할이 드러나는 이름으로 바꿉니다.- 아직 만들지 않은 변수를 일부러 출력해 보고
NameError의 이름을 확인합니다.
정답을 외우기보다 값을 바꾸기 전에 결과를 먼저 예상해 보는 것이 좋습니다. 예상과 실제 결과가 다르면 오른쪽 계산과 이름표 이동을 한 줄씩 따라가 보세요.
정리
변수는 프로그램이 값을 다시 사용하도록 이름을 붙이는 방법입니다. =는 같다는 비교가 아니라 오른쪽 값을 왼쪽 이름에 연결하는 대입 기호입니다. 대입문은 오른쪽을 먼저 계산한 다음 이름을 그 결과에 연결합니다.
파이썬의 변수는 값을 담은 상자보다 객체를 가리키는 이름표에 가깝습니다. 재대입하면 이름표가 새 값으로 옮겨 갑니다. 변수 이름은 숫자로 시작할 수 없고, 대소문자를 구분하며, 역할이 드러나도록 소문자와 밑줄을 사용하면 읽기 좋은 코드가 됩니다.
다음 글에서는 변수가 가리키는 값의 종류인 기본 자료형을 다루겠습니다. int, float, str, bool, None이 무엇이고 왜 구분해서 사용하는지 일상적인 예제로 알아보겠습니다.
참고 자료
'파이썬(Python)' 카테고리의 다른 글
| [Python(파이썬)] 조건문이란? if·elif·else와 중첩 조건 쉽게 이해하기 (0) | 2026.08.09 |
|---|---|
| [Python(파이썬)] input()이란? 사용자 입력과 int·float 형 변환 쉽게 이해하기 (0) | 2026.08.08 |
| [Python(파이썬)] 연산자란? 산술·비교·논리 연산과 우선순위 이해하기 (0) | 2026.08.07 |
| [Python(파이썬)] 기본 자료형이란? int, float, str, bool, None 쉽게 이해하기 (3) | 2026.08.05 |
| [Python(파이썬)] 첫 시작: print(), 주석, 들여쓰기와 코드 실행 순서 (0) | 2026.08.03 |