요약
명령형 프로그램은 결과를 한 번에 계산하지 않는다. 중간값을 저장하고 바꾸어 가며 결과를 한 단계씩 만들어 간다. 이 수업은 그 값들이 저장되는 곳, 곧 변수를 공부한다. 변수는 이름과 자료형과 값을 가진 메모리 칸이다. 변수를 중괄호로 선언하고 초기화하는 법과 중괄호가 권장되는 이유, 대입으로 값을 바꾸는 법(대입 기호 =는 수학에서와 같은 뜻이 아니다), 프로그램의 상태, 곧 각 순간 모든 변수의 값을 추적표로 따라가는 법, 변수가 무엇을 담는지 말해 주는 이름을 고르는 법, 그리고 이 단계에서 가장 소리 없는 오류, 곧 한 번도 값을 받은 적 없는 변수를 읽는 일(C++에서는 정의되지 않은 동작이다)을 피하는 법을 가르친다.
학습 목표
- 변수를 중괄호로 선언하고 초기화하며, 주어진 프로그램에서 초기화와 대입을 구별한다.
- 대입이 이어지는 프로그램의 상태를 추적표로 손으로 따라가고, 그렇게 하여 출력을 예측한다.
- 언어의 규칙과 강좌의 가이드에 따라, 각 변수가 무엇을 담는지 말해 주는 영어 이름을 고른다.
- 초기화하지 않은 변수를 읽는 것이 왜 정의되지 않은 동작인지 설명하고, 프로그램에서 그것을 찾아내며, 항상 초기화하여 그것을 예방한다.
칸으로서의 변수
문제에서 알고리즘으로 수업에서 알고리즘은 와 같은 글자로 쓰였고, 그 글자들은 한 값을 가졌다가 다른 값을 가졌다. “에 를 대입한다”처럼. 수학에서 글자는 알려지지 않았더라도 하나의 고정된 값을 나타낸다. 반면 알고리즘에서 글자는 내용이 바뀌는 자리를 나타낸다. C++ 프로그램에도 같은 것이 필요하며, 프로그램은 그것을 컴퓨터의 메모리에서 얻는다.
주기억 장치는 바이트들이 길게 늘어선 것이며, 각 바이트에는 차례 번호, 곧 주소가 있다. 변수는 프로그램이 이름과 자료형을 붙인 이 메모리의 한 부분이다. 따라서 변수에는 네 가지 속성이 있다.
- 이름: 프로그램이 변수를 가리킬 때 쓴다(
count,price). - 자료형: 어떤 값을 담을 수 있는지, 몇 바이트를 차지하는지, 어떤 연산을 허용하는지 정한다.
int타입은 정수를,double타입은 소수부가 있는 수를 담는다. - 값: 주어진 순간에 담고 있는 값이며, 프로그램이 실행되는 동안 바뀔 수 있다.
- 메모리 안의 위치: 컴파일러와 시스템이 고르며, 프로그램이 그것을 알아야 할 일은 거의 없다.
기억해 둘 만한 그림은 칸의 그림이다. 이름은 위에 쓰여 있고 값은 안에 들어 있다. 자료형은 칸의 크기와 모양이다. int 칸에는 2.5가 들어가지 않는다. 우편함의 편지 칸에 소포가 들어가지 않는 것과 같다. 이 수업의 그림들은 프로그램의 상태를 이렇게 그리며, 문 하나가 실행될 때마다 다시 그린다.
자료형이 크기를 정한다는 것은 눈으로 확인할 수 있다. sizeof 연산자는 변수나 자료형이 차지하는 바이트 수를 준다.
#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바이트를 차지한다. 이 수치는 모든 시스템에서 같지 않으며, 각 자료형에 서로 다른 값이 몇 개 들어가는지는 이 수치에 달려 있다. 이것은 정수와 그 표현 수업과 부동소수점 수 수업에서 공부한다. 여기서는 핵심만으로 충분하다. 변수의 자료형은 선언할 때 정해지고 결코 바뀌지 않는다. 바뀌는 것은 값이다.
콘텐츠를 불러오는 중…