변수
변수(variable)란 데이터를 저장하는 기억 장소이다. 즉, 데이터를 넣어두는 상자와 같다. 이 상자에는 알기 쉽도록 이름을 붙여둔다. 이것이 변수명이다.
식별자
식별자(identifier)란 프로그램에서 사용하는 클래스, 변수, 메소드 그 외의 요소에 붙이는 이름으로 심볼이라고도 한다.
식별자에는 다음과 같은 규칙이 있다.
- 영자, 숫자, 밑줄(_) 중 어느 것을 사용한다. 특수 기호를 포함할 수 없다.
- 길이에는 제한이 없다. 단, 환경에 따라서는 31문자까지로 되어 있는 것도 있다.
- 미리 C++가 예약하고 있는 [키워드]를 사용할 수 없다. 주요 키워드로 return이 있다.
- 숫자는 식별자의 처음에 사용할 수 없다.
- 대문자와 소문자는 다른 것으로 구별된다.
다음의 예는 식별자로서 바르지 않다. 이들은 변수의 이름으로 사용할 수 없다.
12a //숫자가 먼저 나오면 안된다.
main //C++에서 예약되어 있는 키워드로 사용하지 못한다.
cb-a //특수 문자는 사용할 수 없다.
형
다음은 변수의 [형]이다. 변수에는 값을 기억시킬 수 있는데 이 값에는 몇 개의 [종류]가 있다. 예를 들면, 정수값을 입력하는 변수라든가, 부동 소수점을 입력하는 변수 등 몇 개의 형이 있다. 기본적인 형은 다음과 같다.
C++의 주요 기본형의 예
종류 | 이름 | 사이즈 | 기억할 수 있는 값의 범위 |
논리형 | bool | 1바이트 | true 또는 false |
문자형 | char | 1바이트 | 영문자 1문자 -128~127 |
unsigned char | 1바이트 | 영숫자 1문자(부호 없음) 0~255 | |
정수형 | short int | 2바이트 | 정수 -32768~32767 |
unsigned short int | 2바이트 | 정수(부호없음) 0~65535 |
|
VS 2013 이후부터 short, long 구분 X |
int | 4바이트 | 정수 -2147483648~2147483647 |
unsigned int | 4바이트 | 정수(부호없음) 0~4294967295 |
|
long int | 4바이트 | 긴 정수 -2147483648~2147483647 |
|
unsigned long int | 4바이트 | 긴 정수(부호 없음) 0~4294967295 |
|
부동 소수점수 | float | 4바이트 | 단정도 부동 소수점수 3.4E-38~3.4E+38 |
double | 8바이트 | 배정도 부동 소수점수 1.7E-308~1.7E+308 |
|
long double | 8바이트 | 확장 배정도 부동 소수점수 1.7E-308~1.7E+308 |
변수의 선언
코드 내에서 변수를 사용하려면 처음에 변수를 준비하는 작업이 필요한데 이 작업을 변수를 선언한다(declaration)라고 한다. 변수는 다음과 같이 선언한다.
[구문 : 변수의 선언]
형명 식별자;
변수의 선언은 1개의 문장으로 수행되는데 맨 마지막에 세미콜론(;)을 붙인다. 실제로 변수를 선언하는 코드는 다음과 같다.
int num; //① int형의 변수 num이다
char b; //② char형의 변수 b이다
double c, d; //③ double형의 2개의 변수 c와 d이다
변수는 컴마(,)로 이름을 구분하고, 1개의 문장에 한꺼번에 선언할 수 있다.
변수의 이용
변수를 선언하면 변수에 특정한 값을 기억시킬 수 있다. 이것을 값을 대입한다(assignment)라고 한다. 대입을 하려면 다음과 같이 [=]이라는 기호를 사용해서 기술한다.
num = 5;
이것으로 변수 num에 값 5를 기억시킬 수 있다.
변수에 값을 대입하는 코드의 형식은 다음과 같다.
변수명 = 식;
[식]은 추후에 배우며 여기서는 3과 5라는 일정의 [값]으로 생각해 두도록 한다.
예제) 변수의 사용
정수형 변수를 선언한 후 정수값을 변수에 대입하여 변수를 출력하는 코드를 작성해보도록 한다.
#include <iostream>
using namespace std;
int main()
{
int num;
// 이 코드의 경우 int형의 변수 num을 선언한다.
num = 5;
// 변수 num에 5이라는 값을 대입한다.
cout << "변수 num의 값은 " << num << "이다.\n";
/* [=]이라는 기호는 수학의 식에서 사용되는 것처럼 [왼쪽과 오른쪽이 같다]라는
의미는 아니다. [식을 대입한다]라는 기능을 나타내는 것이다. 즉, 오른쪽에 있
는 값(5)을 왼쪽 변수(num)의 주소에 저장한다. */
return 0;
}
변수의 값을 출력하기 위해서는 ' '와 " "라는 인용 부호를 붙이지 않고 변수명을 기술한다. 그렇게 하면 코드를 실행했을 때 실제로 출력되는 것은 num이라는 변수명이 아니고 변수 num에 저장되어 있는 5라는 값이 된다.
변수의 초기화
변수에 처음에 값을 대입하는 것을 변수의 초기화(initialization)라고 하고, 그 값을 초기값(initial value)이라고 한다.
그런데 위 예제에서는
int num; //변수를 선언한다
num = 5; //다음의 문에서 변수에 값을 대입한다
와 같이 변수를 선언하고 나서 다시 1개의 문장을 기술하고 변수에 값을 대입하였다. 변수는 선언과 동시에 초기화할 수 있다. 변수를 초기화하는 코드는 다음과 같이 쓴다.
int num = 5; //변수를 5로 초기화한다
이 문은 앞선 예제에서 2개의 문장으로 나타낸 처리를 1개의 문장으로 묶어서 수행한 것이다. 이 num=5;를 초기화자(initializer)라고 한다.
[구문 : 변수의 초기화]
형명 식별자 = 식;
변수의 값 변경
코드는 1개씩 처리되는 것으로 하였다. 이 성질을 이용해서 일단 대입한 변수의 값을 새로운 값으로 변경할 수 있다.
예제) 변수의 값 변경
num 변수의 값을 5로 초기화한 후 num의 변수에 7을 대입하는 코드를 작성해 보도록 한다.
#include <iostream>
using namespace std;
int main()
{
int num = 5;
cout << "변수 num의 값은 " << num << "이다.\n";
num = 7;
/* 변수에 새로운 값으로 7을 대입한다. 이와 같이 변수에 다시 한 번 대입하면
값을 덮어쓰고 변수의 값을 변경하는 처리를 수행할 수 있다. */
cout << "변수 num의 값을 변경하였다.\n";
cout << "변수 num의 새로운 값은 " << num << "이다.\n";
/* 변수의 새로운 값을 출력한다. 앞에서 변수의 값이 변경되었기 때문에 변수
num을 출력할 때에는 새로운 값은 [7]이 출력된다. */
return 0;
}
다른 변수의 값을 대입
값을 대입할 때에 =의 오른쪽에 기술하는 것은 3과 5라는 일정의 수치뿐만 아니라 변수를 이용하여 값을 대입할 수 있다.
예제) 다른 변수의 값 대입
num1, num2의 두 변수를 선언한 후 num1의 값을 num2에 대입하는 코드를 작성해 보도록 한다.
#include <iostream>
using namespace std;
int main()
{
int num1, num2;
num1 = 3;
cout << "변수 num1의 값은 " << num1 << "이다.\n";
num2 = num1;
/* 여기서는 = 기호의 오른쪽에 수치가 아니고 변수의 num1을 기술하고 있다.
그러면 변수 num2에는 [변수 num1의 값]이 대입되는 것으로 된다. */
cout << "변수 num1의 값을 num2에 대입하였다.\n";
cout << "변수 num2의 값은 " << num2 << "이다.\n";
return 0;
}
값의 대입에 관한 주의
변수에 값을 대입할 때에는 주의해야 할 것이 있다. 다음의 코드를 살펴보도록 한다.
예제) 변수의 값 대입
정수형인 변수 num1과 실수형인 변수 num2에 3.14를 각각 대입한 후 출력하는 코드를 작성해 보도록 한다.
#include <iostream>
using namespace std;
int main()
{
int num1;
double num2;
num1 = 3.14;
num2 = 3.14;
// 이 코드에서는 변수 num1과 num2에 같은 [3.14]를 대입한다.
cout << "변수 num1의 값은 " << num1 << "이다.\n";
/* 위에서 num1과 num2에 같은 [3.14]를 대입함에도 불구하고 다른 값인 [3]이
출력되어 버린다. 이것은 int형의 변수인 num1에는 정수값 밖에 저장할 수 없는
것으로 되어 있기 때문이다. */
cout << "변수 num2의 값은 " << num2 << "이다.\n";
// num2 변수는 double형이므로 3.14 값을 출력한다.
return 0;
}
변수는 선언한 형에 의해 기억할 수 있는 값의 종류가 정해진다. 정수형의 변수에 소수 값을 대입하면 자동적으로 형의 변환이 수행되어 소수점 이하가 잘려버리게 된다.
변수의 형에는 주의해야 한다. 형의 변환에 관해서는 다음에도 설명한다.
변수의 선언 위치에 관한 주의
당분간은 변수의 선언을 main() 함수의 블록 내에 기술해가는 것으로 한다.(지역 변수, local variable)
사실은 main() 함수의 블록 바깥에 변수를 선언할 수도 있지만(전역 변수, global variable), 이 방법에 관해서는 추후에 자세히 살펴보도록 한다.
또 같은 블록 내에서는 이름이 중복하는 변수를 선언할 수 없다는 것에 주의해야 한다.
출처: 박흥복, 서정희. 2015. C++ 프로그래밍 (초보자를 위한). 문운당
'개발 > C++' 카테고리의 다른 글
C++ 식과 연산자 (0) | 2022.02.25 |
---|---|
C++ 변수2 (0) | 2022.02.20 |
C++ 프로그래밍의 기본3 (0) | 2022.02.17 |
C++ 프로그래밍의 시작 (0) | 2022.02.15 |
C++ 프로그래밍의 기본2 (0) | 2022.02.15 |