Menu
Coddy logo textTech

변수란 무엇인가요?

프로그래밍에서 변수는 프로그램이 실행되는 동안 읽고 바꿀 수 있는 값을 저장하는, 이름이 붙은 메모리 공간입니다. score나 user_name 같은 이름 덕분에 코드는 값이 어디에 저장되어 있는지 몰라도 그 값을 가리킬 수 있어요.

글쓴이: Kevin Spektor, 공동 창업자, CTO

업데이트: 2026년 9월 24일

점수를 기록하는 게임은 숫자를 기억하고, 거기에 더하고, 마지막에 보여 줘야 해요. 이 숫자는 코드에 미리 적어 둘 수 없어요. 누가 플레이하느냐에 따라 매번 달라지니까요. 그래서 프로그램은 메모리에 자리를 하나 마련하고, score 같은 이름을 붙이고, 현재 값이 필요할 때마다 그 이름을 써요.

변수는 이렇게 동작해요

프로그램이 실행되는 동안 변수에는 세 가지 일이 일어나요.

  1. 생성. 프로그램이 값을 위한 메모리를 확보하고 거기에 이름을 붙여요. 파이썬에서는 이름에 처음 할당할 때 이 일이 일어나요. 자바와 C에서는 int score;처럼 타입과 함께 변수를 먼저 선언해요.
  2. 할당. =로 이름 아래에 값을 저장해요. 다시 할당하면 이전 값이 바뀌어요.
  3. 사용. 식에서 이름이 나타나는 곳마다, 프로그램은 그 순간 변수가 담고 있는 값을 읽어요.
Start: 0
After one point: 10
Doubled: 20

할당하는 각 줄에서는 그 순간 score가 가진 값을 써서 오른쪽을 먼저 계산해요. 그리고 결과를 같은 이름 아래에 다시 저장해요. 이름은 그대로이고, 담긴 값이 변해요.

등호는 "저장하라"는 뜻이에요

수학에서 x = x + 1에는 해가 없어요. 프로그램에서는 평범한 명령이에요. x의 현재 값을 가져와 1을 더하고, 결과를 x에 저장하라는 뜻이에요. = 기호는 할당 연산자이고, 항상 오른쪽의 값을 왼쪽의 이름으로 옮겨요.

두 값이 같은지 물을 때는 프로그래밍 언어가 다른 연산자인 ==를 써요. x == 5라는 식은 아무것도 바꾸지 않고, 불리언인 True나 False를 만들어요.

수학에서의 의미와 관련은 있지만 같지는 않아요. 대수에서 2x + 3 = 7의 x는 풀어서 구하는 미지수 하나를 나타내요. 프로그램에서 변수는 이미 알고 있는 값을 담고, 그 값은 프로그램이 실행되면서 바뀔 수 있어요.

변수와 자료형

모든 값에는 타입이 있어요. 정수, 소수, 텍스트, 불리언, 리스트 같은 것이죠. 언어마다 다른 점은 변수 자체에 타입이 있느냐예요.

파이썬과 자바스크립트에서는 값이 타입을 갖고 있어서, 한 변수가 시간이 지나면서 서로 다른 타입의 값을 담을 수 있어요. 이것을 동적 타이핑이라고 해요.

42 <class 'int'>
forty-two <class 'str'>

자바, C, C++에서는 변수에 선언할 때 정한 고정 타입이 있어요. 이것이 정적 타이핑이에요. int 변수에 텍스트를 저장하려는 코드는 프로그램이 실행되기도 전에 컴파일러가 거부해요.

int age = 30;          // Java: type, name, value
String name = "Rosa";
let age = 30;          // JavaScript: can be reassigned
const PI = 3.14159;    // cannot be reassigned

C에서는 타입이 변수가 차지하는 메모리 크기도 정해요. int는 요즘 거의 모든 시스템에서 4바이트이고, double은 8바이트, char는 정확히 1바이트예요. 게임의 모든 점수처럼 여러 값을 한 이름 아래 두려면 배열이나 리스트를 쓰고, scores[0]처럼 위치로 각 값에 접근해요.

상자와 이름표

변수를 흔히 값을 담는 상자로 그려요. 이 그림은 C에 잘 맞아요. int x;는 실제로 고정된 메모리 영역이고, y = x;는 값을 두 번째 영역으로 복사해요.

파이썬은 이름표에 더 가깝게 동작해요. 모든 값은 객체이고, 변수는 객체 하나에 붙은 이름이에요. 두 이름이 같은 리스트를 가리킬 때 차이가 드러나요.

5 6
[1, 2, 3, 4]

숫자의 경우 y = y + 1은 새 숫자를 만들고 이름표 y를 그쪽으로 옮기기 때문에, x는 여전히 5를 가리켜요. 리스트의 경우 b = a는 아무것도 복사하지 않아요. 두 이름이 리스트 하나를 가리키기 때문에, b를 통해 바꾼 내용이 a를 통해서도 보여요. 별도의 리스트가 필요하면 b = a.copy()라고 쓰세요. 자바와 자바스크립트의 객체와 배열도 똑같이 동작해요.

스코프: 변수가 존재하는 범위

변수는 프로그램의 일부에서만 보이고, 이 범위를 스코프라고 해요. 함수 안에서 만든 변수는 지역 변수예요. 함수가 실행되는 동안 존재하고, 함수가 반환되면 사라져요. 파일의 최상위에서 만든 변수는 전역 변수이고, 그 파일 어디서든 읽을 수 있어요.

지역 변수는 그 값을 바꿀 수 있는 모든 줄이 한 함수 안에 있어서 따라가기 쉬워요. 전역 변수를 많이 쓰는 프로그램은 바로 그 반대 이유로 디버깅하기 어려워요.

변수 이름 짓기

좋은 이름은 값이 무엇을 뜻하는지 말해 줘요. total_price, is_logged_in, retries_left처럼요. 대부분의 언어는 같은 규칙을 따라요.

  • 이름은 영문자, 숫자, 밑줄로 이루어지고, 숫자로 시작할 수 없어요.
  • if, for, class 같은 언어의 키워드는 이름으로 쓸 수 없어요.
  • 이름은 대소문자를 구분하므로 total과 Total은 서로 다른 변수예요.

스타일은 언어마다 달라요. 파이썬은 snake_case(user_name)를 쓰고, 자바와 자바스크립트는 camelCase(userName)를 써요. 절대 바뀌면 안 되는 값은 MAX_SIZE처럼 대문자로 이름을 짓는 경우가 많아요.

흔한 실수

값이 생기기 전에 변수를 쓰는 것. 파이썬은 NameError를 내고 멈춰요.

NameError: name 'total' is not defined

이름의 철자가 틀렸을 때도 같은 오류가 나요. 컴퓨터에게 totla와 total은 서로 다른 이름이니까요.

==를 써야 할 곳에 =를 쓰는 것. 파이썬에서 if x = 5:는 구문 오류라서 바로 알 수 있어요. C와 자바스크립트에서 if (x = 5)는 올바른 코드예요. x에 5를 저장하고, 조건은 항상 참이 돼요. 프로그램은 실행되면서 틀린 결과를 내고, 이런 논리 오류는 찾는 데 오래 걸릴 수 있어요.

변수 하나에 두 가지 일을 시키는 것. 함수 위쪽에서는 가격을, 아래쪽에서는 개수를 담는 변수도 동작은 해요. 하지만 읽는 사람마다 지금은 어느 뜻인지 계속 따라가야 해요. 뜻마다 이름을 따로 주세요.

다음으로 읽을 내용

변수는 값을 담고, 다음 단계는 어떤 종류의 값이 있는지 아는 거예요. 참과 거짓은 불리언이란 무엇인지에서, 한 이름 아래의 여러 값은 배열이란 무엇인지에서 읽어 보세요. 파이썬 변수 가이드는 할당, 이름 규칙, 여러 변수 동시 할당을 더 자세히 다루고, 파이썬 강의에서는 첫 레슨부터 변수를 직접 만들고 바꿔 봐요.

자주 묻는 질문

파이썬에서 변수란 무엇인가요?
파이썬의 변수는 값을 가리키는 이름이에요. age = 30처럼 할당하면 만들어지고, 타입을 선언하지 않아요. 같은 이름이 나중에 다른 타입의 값을 가리킬 수도 있어요. 관례상 파이썬 변수 이름은 snake_case로 써요.
변수를 간단하게 정의하면 무엇인가요?
변수는 프로그램이 저장하고 바꿀 수 있는 값에 붙인 이름이에요. 이름은 그대로이고 그 아래의 값은 바뀔 수 있어요. 점수판이 "홈"이라는 이름표는 그대로 두고 그 아래 숫자만 올라가는 것과 같아요.
아이에게 변수를 어떻게 설명하면 좋을까요?
이름표가 붙은 상자에 비유해 보세요. 이름표는 score 같은 이름이고, 상자에는 한 번에 하나만 들어가요. 안을 들여다보고 무엇이 들었는지 볼 수도 있고, 꺼내고 새것을 넣을 수도 있어요. 그래도 이름표는 그대로예요.
변수와 상수는 무엇이 다른가요?
변수의 값은 정한 뒤에도 바꿀 수 있지만, 상수의 값은 한 번 할당하면 고정돼요. 자바는 상수에 final을 붙이고, 자바스크립트와 C는 const를 써요. 파이썬에는 강제되는 상수가 없어서, 바꾸면 안 된다는 뜻으로 MAX_USERS처럼 이름을 대문자로 써요.
프로그래밍에서 변수의 종류에는 무엇이 있나요?
변수는 보통 어디서 보이는지에 따라 나눠요. 지역 변수는 한 함수 안에만 있고, 전역 변수는 파일이나 프로그램 전체에서 보이며, 인스턴스 변수는 클래스의 객체 하나에 속해요. 정수, 부동소수점 수, 문자열, 불리언처럼 담고 있는 값의 타입으로 설명하기도 해요.
Coddy programming languages illustration

Coddy로 코딩 배우기

시작하기