본문 바로가기
Topos Uranos

요약

명령형 프로그램은 결과를 한 번에 계산하지 않는다. 중간값을 저장하고 바꾸어 가며 결과를 한 단계씩 만들어 간다. 이 수업은 그 값들이 저장되는 곳, 곧 변수를 공부한다. 변수는 이름과 자료형과 값을 가진 메모리 칸이다. 변수를 중괄호로 선언하고 초기화하는 법과 중괄호가 권장되는 이유, 대입으로 값을 바꾸는 법(대입 기호 =는 수학에서와 같은 뜻이 아니다), 프로그램의 상태, 곧 각 순간 모든 변수의 값을 추적표로 따라가는 법, 변수가 무엇을 담는지 말해 주는 이름을 고르는 법, 그리고 이 단계에서 가장 소리 없는 오류, 곧 한 번도 값을 받은 적 없는 변수를 읽는 일(C++에서는 정의되지 않은 동작이다)을 피하는 법을 가르친다.

학습 목표

  1. 변수를 중괄호로 선언하고 초기화하며, 주어진 프로그램에서 초기화와 대입을 구별한다.
  2. 대입이 이어지는 프로그램의 상태를 추적표로 손으로 따라가고, 그렇게 하여 출력을 예측한다.
  3. 언어의 규칙과 강좌의 가이드에 따라, 각 변수가 무엇을 담는지 말해 주는 영어 이름을 고른다.
  4. 초기화하지 않은 변수를 읽는 것이 왜 정의되지 않은 동작인지 설명하고, 프로그램에서 그것을 찾아내며, 항상 초기화하여 그것을 예방한다.

칸으로서의 변수

문제에서 알고리즘으로 수업에서 알고리즘은 qq와 rr 같은 글자로 쓰였고, 그 글자들은 한 값을 가졌다가 다른 값을 가졌다. “rr에 r−br - b를 대입한다”처럼. 수학에서 글자는 알려지지 않았더라도 하나의 고정된 값을 나타낸다. 반면 알고리즘에서 글자는 내용이 바뀌는 자리를 나타낸다. C++ 프로그램에도 같은 것이 필요하며, 프로그램은 그것을 컴퓨터의 메모리에서 얻는다.

주기억 장치는 바이트들이 길게 늘어선 것이며, 각 바이트에는 차례 번호, 곧 주소가 있다. 변수는 프로그램이 이름과 자료형을 붙인 이 메모리의 한 부분이다. 따라서 변수에는 네 가지 속성이 있다.

  1. 이름: 프로그램이 변수를 가리킬 때 쓴다(count, price).
  2. 자료형: 어떤 값을 담을 수 있는지, 몇 바이트를 차지하는지, 어떤 연산을 허용하는지 정한다. int 타입은 정수를, double 타입은 소수부가 있는 수를 담는다.
  3. 값: 주어진 순간에 담고 있는 값이며, 프로그램이 실행되는 동안 바뀔 수 있다.
  4. 메모리 안의 위치: 컴파일러와 시스템이 고르며, 프로그램이 그것을 알아야 할 일은 거의 없다.

기억해 둘 만한 그림은 칸의 그림이다. 이름은 위에 쓰여 있고 값은 안에 들어 있다. 자료형은 칸의 크기와 모양이다. int 칸에는 2.5가 들어가지 않는다. 우편함의 편지 칸에 소포가 들어가지 않는 것과 같다. 이 수업의 그림들은 프로그램의 상태를 이렇게 그리며, 문 하나가 실행될 때마다 다시 그린다.

자료형이 크기를 정한다는 것은 눈으로 확인할 수 있다. sizeof 연산자는 변수나 자료형이 차지하는 바이트 수를 준다.

C++ 프로그램
#include <print>​int main(){    const int count{12};    const double price{4.5};    std::println("count는 {}바이트를 차지한다", sizeof(count));    std::println("price는 {}바이트를 차지한다", sizeof(price));}
출력
count는 4바이트를 차지한다price는 8바이트를 차지한다

여기서 int 타입은 4바이트를, double 타입은 8바이트를 차지한다. 이 수치는 모든 시스템에서 같지 않으며, 각 자료형에 서로 다른 값이 몇 개 들어가는지는 이 수치에 달려 있다. 이것은 정수와 그 표현 수업과 부동소수점 수 수업에서 공부한다. 여기서는 핵심만으로 충분하다. 변수의 자료형은 선언할 때 정해지고 결코 바뀌지 않는다. 바뀌는 것은 값이다.