프로그래밍에서 변수(Variable)란? 사탕 상자로 이해하기
프로그래밍의 기초를 다지는 변수라는 개념
코딩을 처음 배울 때 가장 먼저 만나는 개념 중 하나가 변수입니다.
프로그래밍 언어를 배우기 시작하면 튜토리얼 첫 부분에 거의 빠지지 않고 등장하는 개념으로, 프로그램이 데이터를 기억하는 기본적인 방법입니다.
하지만 코딩 입문자에게는 변수라는 단어가 수학 시간에 배운 미지수를 떠올리게 해서 막연히 어렵게 느껴지기도 합니다.
우리가 만드는 소프트웨어는 결국 데이터를 처리하는 과정입니다. 사용자가 입력한 이름, 장바구니에 담은 상품의 개수, 게임 속 캐릭터의 점수 같은 정보를 컴퓨터가 처리하고 기억해야 합니다.
이때 데이터를 담아 두는 그릇 역할을 하는 것이 변수입니다. 변수를 이해하면 이후에 배우는 조건문이나 반복문도 훨씬 수월해집니다.
사탕 상자로 변수 이해하기
변수를 쉽게 이해하는 방법은 사탕 상자를 떠올리는 것입니다. 책상 위에 사탕 상자 여러 개가 놓여 있다고 상상해 보겠습니다. 각 상자에는 서로 다른 종류와 개수의 사탕을 담을 수 있습니다.
프로그래밍의 변수도 이 사탕 상자와 비슷한 구조입니다. 첫 번째 상자에는 초콜릿 사탕을 넣고 상자 겉면에 ‘초콜릿’이라고 이름표를 붙여 둡니다.
두 번째 상자에는 박하사탕을 넣고 ‘박하’라는 이름표를 붙입니다. 여기서 상자는 변수, 상자 겉면의 이름표는 변수의 이름, 상자 안의 사탕은 변수에 저장된 값에 해당합니다.
초콜릿 사탕을 먹거나 새로 채워 넣으면 상자 안의 내용물은 달라집니다. 하지만 상자의 이름표는 그대로 ‘초콜릿’입니다.
프로그래밍에서도 변수에 들어 있는 값은 언제든지 바꿀 수 있지만 변수의 이름은 그대로입니다. 이 비유를 떠올리면 코드가 데이터를 어떻게 기억하고 사용하는지 쉽게 그려 볼 수 있습니다.
파이썬으로 변수 만들어 보기
이제 사탕 상자 비유를 파이썬 코드로 옮겨 보겠습니다. 파이썬에서는 =를 사용해 변수에 값을 넣습니다. 수학의 ‘같다’와는 달리, 오른쪽의 값을 왼쪽 이름의 변수에 넣는다는 뜻입니다.
candy = 10
print(candy)
candy = 7
print(candy)
실행하면 10과 7이 차례로 출력됩니다. 처음에는 candy 변수에 10을 넣었고, 이어서 7을 넣으면 이전 값 10 대신 새 값 7이 저장되기 때문입니다. 변수의 이름은 그대로이고 값만 바뀐 것입니다.
변수의 다양한 종류와 데이터의 성격
현실의 사탕 상자도 크기가 다르고 담을 수 있는 물건이 다르듯, 프로그래밍의 변수도 담는 데이터의 성격에 따라 종류가 나뉩니다. 이를 데이터 타입 또는 자료형이라고 부르며, 컴퓨터가 데이터를 알맞게 처리하기 위해 필요한 규칙입니다.
숫자를 담는 상자가 있습니다. 나이나 가격처럼 계산이 필요한 데이터는 정수나 실수 형태의 숫자 변수에 저장합니다. 예를 들어 상품의 가격을 담는 상자에는 1500이라는 숫자를 넣을 수 있습니다.
문자를 담는 상자도 있습니다. 이름이나 주소처럼 글자로 이루어진 데이터는 문자열이라는 형태의 변수에 저장합니다. 홍길동이라는 이름을 저장하고 싶다면 문자열 상자에 넣습니다.
참과 거짓을 담는 상자도 있습니다. 로그인 상태인지, 게임이 끝났는지처럼 참과 거짓 두 가지 값만 필요할 때는 불리언이라는 형태의 변수를 사용합니다.
- 숫자형 변수는 사칙연산이 가능해서 계산이 필요한 곳에 주로 사용합니다.
- 문자열 변수는 파이썬에서 따옴표로 감싸서 표현하며, 글자를 저장하거나 출력할 때 사용합니다.
- 불리언 변수는 파이썬에서 True 또는 False 두 값만 가지며, 조건문과 함께 프로그램의 흐름을 정할 때 사용합니다.
세 가지 종류를 파이썬 코드로 확인해 보겠습니다. 파이썬의 type() 함수는 변수에 들어 있는 값의 종류를 알려 줍니다.
name = "홍길동"
price = 1500
is_login = True
print(name)
print(price + 500)
print(is_login)
print(type(price))
print(type(name))
print(type(is_login))
실행하면 홍길동, 2000, True가 차례로 출력됩니다. price + 500은 1500에 500을 더하는 계산이라 2000이 됩니다. 이어서 type()의 결과로 int(정수), str(문자열), bool(불리언)이라는 글자가 들어간 줄이 차례로 나옵니다.
일상생활에서 찾아보는 변수의 흔적
우리의 일상은 변수와 닮은 예로 가득합니다. 코드를 작성하지 않더라도 우리는 매 순간 값이 바뀌는 것들을 다루며 살고 있습니다.
스마트폰의 배터리 잔량 표시가 대표적인 예입니다. 배터리 잔량은 시간이 지나면서 100퍼센트에서 점점 줄어들고, 충전기를 꽂으면 다시 늘어납니다.
스마트폰도 현재 배터리 잔량을 값으로 저장해 두고, 이 값이 바뀔 때마다 화면에 보이는 표시를 바꾼다고 이해하면 쉽습니다.
은행 계좌의 잔고도 변수와 비슷합니다. 월급이 들어오면 잔고라는 상자 속의 숫자가 커지고, 커피를 사 마시면 그만큼 줄어듭니다.
은행 시스템은 이 잔고 값을 정확하게 계산하고 기록하는 프로그램으로 이루어져 있습니다. 이처럼 변화하는 값을 추적하고 기록해야 하는 곳에는 변수와 같은 개념이 쓰입니다.
변수를 다룰 때 자주 저지르는 실수와 주의점
프로그래밍을 공부하다 보면 변수와 관련해서 초보자가 자주 겪는 시행착오가 있습니다. 미리 알아 두면 실수를 줄일 수 있습니다.
변수 이름을 대충 짓는 것이 가장 흔한 실수 중 하나입니다. 코드가 짧을 때는 a나 b 같은 한 글자 이름도 문제없어 보입니다.
하지만 코드가 길어지면 a가 무엇을 의미하는지 알기 어려워집니다. 사탕 상자에 이름표를 붙이지 않거나 알아볼 수 없는 낙서를 해 둔 것과 같습니다.
변수 이름은 나중에 내가 다시 보거나 다른 사람이 보더라도 무엇이 들어 있는지 알 수 있도록 구체적으로 짓는 것이 좋습니다. 예를 들어 price는 가격, name은 이름이라는 것을 바로 알 수 있습니다.
두 번째 실수는 값을 넣기 전에 변수를 사용하는 것입니다. 사탕을 넣은 적도 없고 이름표도 붙이지 않은 상자에서 사탕을 꺼내려는 것과 같습니다.
파이썬에서는 변수에 처음 값을 넣는 순간 변수가 만들어집니다. 그래서 값을 넣기 전에 변수 이름을 사용하면 NameError라는 오류가 발생합니다. 아래 코드를 보겠습니다.
print(count)
count = 1
실행하면 NameError: name ‘count’ is not defined라는 오류 메시지가 나옵니다. count가 정의되지 않았다는 뜻입니다. print(count)를 실행하는 시점에 count에 아직 값을 넣은 적이 없기 때문입니다. count = 1을 print(count)보다 먼저 쓰면 해결됩니다.
좋은 변수 이름을 짓기 위한 실전 요령
- 변수의 목적이나 역할이 드러나는 단어를 선택합니다.
- 너무 긴 이름은 피하고, 축약어는 누구나 알 수 있는 것만 사용합니다.
- 대소문자와 단어 조합 방식을 일관되게 유지합니다. 파이썬에서는 단어 사이를 밑줄(_)로 잇는 방식(예: first_box)이 흔히 쓰입니다.
같은 계산도 변수 이름에 따라 읽기 쉬운 정도가 달라집니다. 아래 코드는 이름이 불분명한 경우와 분명한 경우를 비교한 것입니다.
# 이름이 불분명한 경우
a = 1500
b = 3
print(a * b)
# 이름이 분명한 경우
price = 1500
count = 3
print(price * count)
각 코드가 4500을 한 번씩 출력합니다. 결과는 같지만, 두 번째 코드는 변수 이름만 봐도 가격에 개수를 곱하는 계산이라는 것을 알 수 있습니다. #으로 시작하는 줄은 주석이라고 하며, 사람이 읽는 설명이라서 실행되지 않습니다.
읽기 쉬운 코드를 위한 변수 관리 요령
변수를 어떻게 관리하느냐에 따라 코드를 읽고 고치기 쉬운 정도가 크게 달라집니다. 경험 많은 개발자들이 자주 권하는 방법을 두 가지 소개합니다.
첫째, 변수가 쓰이는 범위를 좁게 유지합니다. 사탕 상자를 온 동네 사람이 볼 수 있는 광장에 두는 것보다 내 방 서랍 속에 넣어 두는 것이 관리하기 쉬운 것과 같은 이치입니다.
프로그램 전체에서 공유되는 변수가 많아지면 어디서 값이 잘못 바뀌었는지 찾기 어려워집니다. 필요한 곳에서만 쓰이고 끝나도록 변수를 만드는 것이 좋습니다.
함수 안에서 만든 변수가 함수 밖에서는 보이지 않는 예를 보겠습니다. 함수는 여러 줄의 명령에 이름을 붙여 묶어 둔 것입니다.
def show():
message = "안녕하세요"
print(message)
show()
print(message)
show()를 실행하면 함수 안의 print(message)가 실행되어 “안녕하세요”가 출력됩니다. 하지만 마지막 줄의 print(message)는 NameError를 일으킵니다. message는 함수 안에서만 쓸 수 있는 변수이기 때문입니다. 이처럼 변수를 필요한 곳 안에서만 쓰게 하면 다른 곳에서 값이 실수로 바뀌는 일을 막을 수 있습니다.
둘째, 의미 없는 임시 변수를 불필요하게 늘리지 않습니다. 꼭 필요하지 않은 상자를 책상 위에 가득 쌓아 두면 공간만 차지하고 복잡해지는 것과 같습니다.
코드는 컴퓨터가 실행하는 것이기도 하지만, 결국 사람이 읽고 고쳐야 하는 글이라는 점을 기억해 두면 좋습니다.
변수 개념에 대해 자주 묻는 질문들
프로그래밍 변수를 배우는 분들이 자주 궁금해하는 내용을 정리했습니다.
변수와 상수의 차이점은 무엇인가요?
변수는 이름 그대로 값이 바뀔 수 있는 상자입니다. 상수는 한 번 정한 뒤 바뀌지 않아야 하는 값을 담는 상자입니다. 원주율이나 고정된 설정값처럼 바뀌지 않아야 하는 값에 사용합니다. 자바스크립트의 const나 자바의 final처럼 값을 바꾸지 못하게 막아 주는 문법을 가진 언어도 있습니다. 파이썬에는 그런 문법이 없어서 PI = 3.14처럼 이름을 대문자로 써서 상수라는 것을 표시하는 관례를 따릅니다.
변수 이름을 지을 때 숫자로 시작해도 되나요?
대부분의 프로그래밍 언어에서는 변수 이름을 숫자로 시작할 수 없습니다. 파이썬에서 1st_box = 5처럼 쓰면 SyntaxError(문법 오류)가 발생합니다. box1이나 first_box처럼 문자로 시작하고 숫자는 뒤에 붙여야 합니다.
동일한 이름의 변수를 여러 개 만들 수 있나요?
같은 범위 안에서는 같은 이름의 변수를 따로 두 개 만들 수 없습니다. 파이썬에서는 같은 이름에 다시 값을 넣으면 오류 없이 이전 값이 새 값으로 바뀝니다. 예를 들어 box = 5를 쓴 다음 box = 8을 쓰면 box에는 8이 들어 있습니다. 다만 자바나 C처럼 같은 범위에서 같은 이름의 변수를 다시 만들면 오류가 나는 언어도 있습니다. 함수 안과 밖처럼 범위가 다르면 같은 이름을 써도 서로 다른 변수로 취급합니다.
이처럼 사탕 상자라는 비유로 변수를 살펴보면, 코딩이 낯설게만 느껴지던 분도 변수의 기본 개념을 쉽게 이해할 수 있습니다. 변수는 이름표가 붙은 상자에 값을 담고, 필요할 때 꺼내 쓰고 바꾸는 개념입니다.
일상의 물건에 빗대어 코드를 생각하는 습관은 앞으로 조건문, 반복문, 함수를 배울 때도 도움이 됩니다.




댓글 0
첫 댓글을 남겨보세요.