프로그램은 정보를 저장할 수 있어야한다. 프로그램이 정보를 저장하기 위해서는 어디에 정보가 저장되는지, 그곳에 저장된 값, 그리고 어떠한 정보가 저장되는지를 알아야한다. C++에선 변수를 통해서 정보를 저장 할 수 있다. 변수 선언과 값 대입에 대해서 알아보자.
변수 선언
int a; //변수 선언 a = 3; //변수 a에 값 3을 대입 int b = 5; //변수 b를 5로 초기화
변수를 선언하기 위해서는 변수의 형(type)과 변수의 이름이 필요하다. 위의 코드에서는 int가 변수의 형이며 a가 변수의 이름이다. 이름은 식별자라고 불리는데 식별자는 특수문자를 포함할 수 없고 숫자로 시작할 수 없으며 대소문자가 구별되고 길이에 제한이 없다. 또한 C++에서 미리 사용되는 키워드(class, return, double 등등)또한 사용할 수 없다. 식별자를 사용할 때에는 가급적이면 의미있는 이름을 붙여주는 것이 도움이 된다. a, b, c와 같은 의미없는 이름일 경우 프로그램이 커질수록 어떤 정보가 저장되고 사용되는지 파악하기가 더욱 힘들어진다.
변수에 값을 할당할 때 사용하는 값의 유형을 형(type)이라고 부른다. C++에서 자주 사용되는 기본형은 다음 표와 같다.
이외에도 long int, short int같은 기본형들도 있다. 표의 크기 항목은 변수가 차지하는 메모리의 크기이다. 변수의 선언 과정은 구체적으로 컴파일러에게 변수의 이름과 형을 알려주고 변수를 저장하기 위한 메모리를 확보하는 과정이다. 따라서 저장하려는 데이터에 따라 적절한 형을 사용하고 불필요한 변수선언을 피해야 메모리를 효율적으로 사용할 수 있다.
값 대입
선언된 변수에는 값을 대입시킬 수 있다. 이것은 변수가 선언될 때 준비된 메모리에 값을 저장하는 것이다. 변수에 값을 대입시킬 때는 기호 '='를 사용하는데 일반적인 수식에서의 등호라고 생각하면 안된다. 또한 변수를 선언함과 동시에 값을 저장 할 수 있는데 이런 처리를 변수의 초기화라고 한다. 값의 대입과 변수의 초기화 모두 기호 =를 사용하지만 엄밀하게 말해서 둘은 구별되는 개념이다.
대입을 통해서 변수의 값을 바꿀 수 있다. 또한 변수의 값을 변수에 대입할 수도 있다.
#include <iostream> int main() { int a = 1; //a를 1로 초기화 std::cout<<a<<std::endl; //a에 저장된 값 1 출력 a = 3; //a에 3 대입 std::cout<<a<<std::endl; //a에 새로 저장된 값 3 출력 int b, c; //변수 b, c 선언 b = 5; //b에 5 대입 c = b; //변수 b의 값을 변수 c에 대입 std::cout<<c<<std::endl; //c에 저장된 변수 b의 값 5 출력 return 0; }
하지만 값을 대입 할 때 변수의 형과 맞지 않는 값을 대입한다면 정보의 손실이 일어날 수 있다.
int a; double b; a = 2.567; //int형 변수 a에 2.567대입 b = 2.567; //double형 변수 b에 2.567대입
a와 b에 같은 값 2.567을 대입하여도 출력해보면 각각 2와 2.567이 출력된다. int형 변수에는 정수만 저장할 수 있기 때문이다. 정수형 변수에 소수값을 대입하면 자동으로 형변환이 이루어져서 소수점 뒷자리가 버려지게 된다.
키보드를 통한 값 대입
기호 =를 사용하지 않고 키보드를 통해서도 변수에 값을 대입할 수 있다. 여기서는 cin(씨-인)을 사용한다. cin은 cout과 마찬가지로 이름에서 알 수 있듯이 무엇인가를 집어넣는 것이다. 바로 코드를 보도록 하자
#include <iostream> int main() { int a; std::cin>>a; //키보드를 통한 값 대입 std::cout<<a<<endl; //대입한 값 출력 return 0; }
프로그램에서 cin>> 부분을 처리할 때 프로그램은 실행을 멈추고 사용자의 입력을 기다린다. 이 때 대입할 값을 입력하고 엔터를 누르면 입력값이 변수에 저장되고 다시 프로그램이 실행된다. cout부분에서도 설명했듯이 >>부분이 데이터의 이동 방향이다. cin>>a 이므로 사용자가 입력한 cin 입력값에서 변수 a로 데이터가 이동된다고 생각하면 된다. 하지만 cin>>을 연속해서 사용할 경우 연속적인 데이터의 이동이 발생하는 것은 아니다. 단지 기억하기 편한 방법으로만 알고있으면 된다.
#include <iostream> int main() { int a, b; std::cin>>a>>b; //a를 먼저 입력후 b를 입력 return 0; }
마지막으로 변수의 값을 바꿀 수 없는 상수(const)지정이 있다. 변수를 초기화 할 때 const를 이용하면 변수가 바뀌는 것을 막을 수 있다.
const int a = 1; //const를 이용한 초기화 a = 2; //컴파일 에러
const를 사용하기 위해서는 변수를 반드시 초기화해야 하고 const로 지정된 변수에 다른 값을 대입하려고 하면 컴파일 에러가 일어난다.