프로그래밍웹 교과서
이 페이지의 목차
2단원 · 1차시

변수 — 값에 이름을 붙이다

변수식별자대입 연산자상수

코드 예제: Python · C · 예상 50분

학습 목표

  • 변수의 개념과 필요성을 설명한다.
  • 변수를 만들어 값을 저장하고 꺼내 쓰는 프로그램을 작성한다.

관련 성취기준

  • 프그02-01

    변수와 자료형의 개념과 특징을 이해하고, 구분하여 지정할 수 있으며, 이들을 사용한 프로그램을 작성할 수 있다.

생각 열기 — 이름이 없으면 다시 못 쓴다

계산기로 88 + 92 + 75 를 눌러 255를 얻었다. 그런데 이 값을 3으로 나눈 뒤, 다시 처음 세 수의 최고점과 비교하려면 어떻게 해야 할까. 계산기 화면에는 마지막 결과 하나만 남아 있다.

변수 — 값을 담아 두는 이름

변수(variable) — 값을 담아 두고 이름으로 꺼내 쓸 수 있게 한 저장 공간는 값을 담아 두는 상자에 붙인 이름이다. 이름을 알면 언제든 값을 꺼내 쓸 수 있고, 새 값을 덮어써 바꿀 수도 있다.

변수에 값을 넣는 일을 대입이라 하고 = 로 적는다. 수학의 등호와 뜻이 다르다. 1단원 7차시에서 순서도에 ← 로 적었던 그 화살표가 여기서 = 가 된다.

Python값을 넣고, 바꾸고, 맞바꾸기
점수 = 88
print("처음 점수:", 점수)

점수 = 92
print("고친 점수:", 점수)

a = 10
b = 20
a, b = b, a
print("바꾼 뒤 a =", a, ", b =", b)
확인된 실행 결과
처음 점수: 88
고친 점수: 92
바꾼 뒤 a = 20 , b = 10
C값을 넣고, 바꾸고, 맞바꾸기확인된 출력
#include <stdio.h>

int main(void)
{
    int score = 88;
    printf("처음 점수: %d\n", score);

    score = 92;
    printf("고친 점수: %d\n", score);

    int a = 10, b = 20, temp;
    temp = a;
    a = b;
    b = temp;
    printf("바꾼 뒤 a = %d , b = %d\n", a, b);
    return 0;
}
실행 결과
처음 점수: 88
고친 점수: 92
바꾼 뒤 a = 20 , b = 10

= 는 같다는 뜻이 아니다

수학에서 x = x + 1 은 성립하지 않는 식이다. 프로그램에서는 자주 쓰는 문장이고 뜻이 전혀 다르다.

오른쪽을 계산해서 그 값을 왼쪽 변수에 넣어라.

그래서 점수 = 점수 + 5 는 “지금 점수에 5를 더한 값을 다시 점수에 넣어라”가 된다. 읽을 때 = 를 “는 ~가 된다” 로 읽으면 헷갈리지 않는다.

이름 짓는 규칙

변수 이름을 아무렇게나 지을 수는 없다. 두 언어가 거의 같은 규칙을 쓴다.

변수 이름 규칙
규칙되는 예안 되는 예
글자·숫자·밑줄만 쓴다score, score2, my_scoremy-score, score!
숫자로 시작할 수 없다score1, c11반, 2nd
공백을 넣을 수 없다total_sumtotal sum
예약어를 쓸 수 없다my_if, totalif, for, int
대소문자를 구분한다score 와 Score 는 다른 변수—

Python은 한글 이름도 쓸 수 있어 이 교과서의 Python 예제에서 더러 쓴다. C는 표준으로는 쓸 수 없다.

좋은 이름이 주석을 줄인다

규칙만 지키면 되는 것이 아니다. 1단원 5차시에서 “이름에 뜻을 담는다”고 했다. 그때 한 이야기가 여기서 실제 코드로 나타난다.

같은 계산, 다른 이름
이렇게 적으면이렇게 적으면
a = 88
b = 92
c = (a + b) / 2
국어 = 88
영어 = 92
평균 = (국어 + 영어) / 2
c 가 무엇인지 알려면 위를 다시 읽어야 한다읽으면 바로 안다. 설명이 필요 없다

값이 바뀌지 않는 것 — 상수

원주율처럼 프로그램이 도는 동안 바뀌면 안 되는 값이 있다. 이런 값을 상수(constant) — 한 번 정하면 프로그램이 도는 동안 바뀌지 않는 값라 한다.

  • C는 const double PI = 3.14159; 처럼 const 를 붙여 언어가 막아 준다. 바꾸려 하면 컴파일 오류가 난다.
  • Python에는 막아 주는 장치가 없다. 대신 PI = 3.14159 처럼 이름을 모두 대문자로 적어 “이건 바꾸지 말자”고 약속한다.

활동

실습

변수 이름 규칙을 어긴 코드의 오류 메시지 읽기

약 20분

1단계 — 일부러 어겨 본다 (10분)

아래를 하나씩 실행해 보고 오류 메시지를 그대로 적는다. 실행기의 [고치기]를 눌러 코드를 바꿔 가며 해 보자.

시도한 코드 어떤 규칙을 어겼나 오류 메시지 (그대로)
1반 = 30
my score = 30
if = 30
점수 = 88 뒤에 print(점수s)

2단계 — 메시지의 모양을 견줘 본다 (5분)

  • 어느 오류가 실행 전에 걸렸는가? 어느 것이 실행 도중에 걸렸는가?
  • 1단원 2차시에서 다룬 컴파일러와 인터프리터의 차이가 여기서 어떻게 보이는가?

3단계 — 이름을 고쳐 쓴다 (5분)

아래 코드의 변수 이름을 뜻이 담긴 이름으로 바꾸고, 바꾼 뒤 주석이 필요 없어졌는지 확인한다.

a = 170        # 키
b = 62         # 몸무게
c = b / ((a/100) ** 2)   # 체질량지수
print(c)

개념 확인 문제

보기를 누르면 바로 채점된다. 틀려도 해설을 읽으면 된다.

프로그램에서 점수 = 점수 + 5 가 뜻하는 것은?프그02-01

다음 중 변수 이름으로 쓸 수 없는 것은?프그02-01

C에서 두 변수의 값을 맞바꿀 때 임시 변수(temp)가 필요한 이유는?프그02-01

상수를 다루는 방식에 대한 설명으로 알맞은 것은?프그02-01

변수 이름을 c 대신 평균 으로 짓는 것이 좋은 가장 큰 이유는?프그02-01

더 알아보기

심화변수는 상자인가, 이름표인가

“변수는 값을 담는 상자”라는 비유는 C에 잘 맞는다. int score = 88; 은 실제로 메모리에 정수 한 칸을 잡고 88을 써 넣는다. 그런데 Python은 조금 다르다. 점수 = 88 은 88이라는 값에 이름표를 붙이는 쪽에 가깝다. 그래서 a = [1, 2] 뒤에 b = a 를 하면, 상자가 복사되는 것이 아니라 같은 목록에 이름표가 하나 더 붙는다. 이 차이는 4차시에서 리스트를 다룰 때 실제로 겪게 된다. 지금은 비유는 언어마다 잘 맞는 곳이 다르다는 것만 기억해 두자.

실무이름 짓는 방식을 팀에서 통일한다

여러 단어를 이어 붙일 때 방식이 여럿이다. total_sum 처럼 밑줄로 잇는 방식, totalSum 처럼 뒷 단어 첫 글자를 대문자로 쓰는 방식이 대표적이다. 어느 쪽이 옳다기보다 한 프로그램 안에서 섞이지 않는 것이 중요하다. Python에서는 밑줄 방식이, Java나 JavaScript에서는 대문자 방식이 관례로 굳어 있다. 3단원 5차시에서 모둠의 코딩 규칙을 정할 때 이 항목이 들어간다.

심화선언하고 쓰는 언어, 그냥 쓰는 언어

C는 int score; 처럼 미리 알려야 쓸 수 있다. 알리지 않고 쓰면 컴파일 오류다. Python은 값을 넣는 순간 변수가 생긴다. 편하지만 대가가 있다 — 점수 를 점슈 로 잘못 적어도 새 변수가 조용히 만들어진다. C라면 “그런 이름 없다”고 바로 걸렸을 일이 Python에서는 실행 중에 엉뚱한 결과로 나타난다. 1단원 2차시의 “오류를 만나는 시점” 차이가 변수 이름에서도 그대로 나타나는 셈이다.

이어지는 학습

이 차시를 이해하려면 다음을 먼저 알아야 한다.

  • 8차시에서 준비한 개발 환경 — 프로그래밍 프그01-04

교과서에서 찾기

교과서해당 위치쪽수
성림출판(Python)프로그래밍의 기초 › 01 변수와 자료형58쪽
씨마스커뮤니케이션(Python)프로그래밍 기초 › 2 변수와 자료형84쪽
삼양미디어(Python)프로그래밍의 기초 › 01 데이터 입출력 (프그02-02와 통합)42쪽
삼양미디어(C)프로그래밍의 기초 › 01 데이터 입출력 (프그02-02와 통합)42쪽
씨마스(C)C 프로그래밍의 기초 › 1 변수와 자료형62쪽
웅보출판사(C)프로그래밍의 기초 › Chapter 01 변수와 자료형61쪽