소개
이 랩에서는 C++ 의 변수와 타입을 배우게 됩니다. 변수를 정의하는 방법과 다양한 유형의 변수를 사용하는 방법을 배우게 됩니다.
내용 미리보기
컴퓨터 프로그램은 데이터를 조작 (또는 처리) 합니다. *변수 (variable)*는 처리를 위해 데이터 조각을 저장하는 데 사용됩니다. 저장된 값을 변경할 수 있기 때문에 변수라고 불립니다.
- 변수 (Variables)
- 식별자 (Identifiers)
- 변수 선언 (Variable Declaration)
- 상수 (Constants)
- 표현식 (Expressions)
- 할당 (Assignment)
- 기본 타입 (Basic Types)
- 기본 타입 및 문자열 리터럴 (Literals for Basic Types and String)
변수
*변수 (variable)*는 특정 데이터 타입의 값을 저장하는 명명된 저장 위치입니다. 즉, 변수는 이름, 타입을 가지며 값을 저장합니다.
- 변수는
radius,area,age,height와 같은 이름 (또는 식별자 (identifier)) 을 갖습니다. 각 변수를 고유하게 식별하여 변수에 값을 할당하고 저장된 값을 검색하려면 이름이 필요합니다. - 변수는 int, double 과 같은 타입을 갖습니다.
- 변수는 해당 특정 타입의 값을 저장할 수 있습니다. 변수는 타입과 연결되어 있으며, 특정 타입의 값만 저장할 수 있습니다.
- 타입은 데이터의 크기와 레이아웃, 값의 범위, 적용할 수 있는 연산 집합을 결정합니다.
다음 다이어그램은 두 가지 유형의 변수, int와 double을 보여줍니다. int 변수는 정수 (정수) 를 저장합니다. double 변수는 실수 (실수) 를 저장합니다.

식별자
*식별자 (identifier)*는 변수 (또는 함수나 클래스와 같은 다른 모든 엔티티) 의 이름을 지정하는 데 필요합니다. C++ 는 식별자에 대해 다음과 같은 규칙을 적용합니다.
- 식별자는 대문자 및 소문자
(a-z, A-Z), 숫자(0-9), 밑줄"_"로 구성된 문자 시퀀스입니다. - 공백 (공백, 탭, 줄 바꿈) 및 기타 특수 문자 (예:
+,-,*,/,'@'등) 는 허용되지 않습니다. - 식별자는 문자 또는 밑줄로 시작해야 합니다. 숫자로 시작할 수 없습니다. 밑줄로 시작하는 식별자는 일반적으로 시스템 사용을 위해 예약되어 있습니다.
- 식별자는 예약된 키워드 또는 예약된 리터럴 (예:
int,double,if,else,for) 일 수 없습니다. - 식별자는 대소문자를 구분합니다.
rose는Rose가 아니고,ROSE도 아닙니다.
변수 명명 규칙
변수 이름은 명사 또는 여러 단어로 구성된 명사구입니다. 첫 번째 단어는 소문자로 시작하고, 나머지 단어는 첫 글자를 대문자로 표기하며, 단어 사이에 공백이 없습니다. 예를 들어, thefontSize, roomNumber, xMax 및 thisIsAVeryLongVariableName은 camel-case로 알려져 있습니다.
권장 사항
- 자기 설명적이고 변수의 의미를 밀접하게 반영하는 이름을 선택하는 것이 중요합니다. 예를 들어,
numberOfStudents또는numStudents와 같습니다. a,b,c,d,i,j,k,i1,j99와 같은 의미 없는 이름을 사용하지 마십시오. 좌표의x,y,z, 인덱스의i와 같은 일반적인 이름을 제외하고는 단일 알파벳 이름을 피하십시오.- 이름이 의미를 정확하게 반영하도록 하기 위해 30 자 정도의 긴 이름을 사용하는 것도 괜찮습니다.
- 단수 및 복수 명사를 신중하게 사용하여 단수 및 복수 변수를 구분합니다. 예를 들어, 단일 행 번호를 참조하려면 변수
row를 사용하고, 여러 행을 참조하려면rows를 사용합니다.
변수 선언
변수를 사용하기 전에 먼저 이름과 타입을 선언해야 하며, 다음 구문 중 하나를 사용합니다.
| 구문 | 예시 |
|---|---|
| 지정된 타입의 변수 선언 | int option; |
| 쉼표로 구분된 동일한 타입의 여러 변수 선언 | double sum, difference, product, quotient; |
| 변수를 선언하고 이 타입의 초기값을 할당 | int magicNumber = 88; |
| 이 타입의 초기값을 가진 여러 변수 선언 | double sum = 0.0, product = 1.0; |
예시
int mark1; // int 변수 mark1 선언
mark1 = 76; // mark1 사용
int mark2; // int 변수 mark2 선언
mark2 = mark1 + 10; // mark2 와 mark1 사용
double average; // double 변수 average 선언
average = (mark1 + mark2) / 2.0; // average, mark1 및 mark2 사용
int mark1; // 오류: 두 번 선언
mark2 = "Hello"; // 오류: 다른 타입의 값 할당
int number; // 선언되었지만 초기화되지 않음
cout << number << endl; // 초기화 전에 사용, 경고/오류는 없지만 예상치 못한 결과 발생.
참고:
- C++ 에서는 변수를 사용하기 전에 변수의 이름을 선언해야 합니다.
- C++ 는 "강력한 타입 (strongly-type)" 언어입니다. 변수는 타입을 갖습니다. 변수의 타입이 선언되면, 해당 특정 타입에 속하는 값만 저장할 수 있습니다.
- 각 변수는 한 번만 선언할 수 있습니다.
- C++ 에서는 사용하기 전에 선언하기만 하면 프로그램 내 어디에서든 변수를 선언할 수 있습니다.
- 변수의 타입은 프로그램 내에서 변경할 수 없습니다.
- 선언되었지만 초기화되지 않은 변수는 쓰레기 값을 포함합니다. C/C++ 는 초기화 전에 변수를 사용해도 경고/오류를 발생시키지 않으므로 예상치 못한 결과가 발생할 수 있습니다.
상수 (const)
상수는 const 키워드로 선언된 수정 불가능한 변수입니다. 프로그램 실행 중에는 값을 변경할 수 없습니다. 또한, const는 선언 시 초기화되어야 합니다. 예를 들어:
const double PI = 3.1415926; // 초기화 필요
상수 명명 규칙: 밑줄로 연결된 대문자 단어를 사용합니다. 예를 들어, MIN_VALUE와 같습니다.
표현식
*표현식 (expression)*은 연산자 (operator) (예: '+', '-', '*', '/') 와 피연산자 (operand) (변수 또는 리터럴 값) 의 조합으로, 특정 타입의 단일 값을 생성하도록 평가될 수 있습니다. 예를 들어,
1 + 2 * 3 // int 7 반환
int sum, number;
sum + number // int 값으로 평가됨
double principal, interestRate;
principal * (1 + interestRate) // double 값으로 평가됨
할당 (=)
*할당문 (assignment statement)*은 다음을 수행합니다:
- 리터럴 값 (RHS) 을 변수 (LHS) 에 할당합니다; 또는
- 표현식 (RHS) 을 평가하고 결과 값을 변수 (LHS) 에 할당합니다.
RHS 는 값이어야 하며, LHS 는 변수 (또는 메모리 주소) 여야 합니다.
할당문의 구문은 다음과 같습니다:
| 구문 | 예시 |
|---|---|
| 리터럴 값 (RHS) 을 변수 (LHS) 에 할당 | number = 88; |
| 표현식 (RHS) 을 평가하고 결과를 변수 (LHS) 에 할당 | sum = sum + number; |
할당문은 다음과 같이 해석해야 합니다: 오른쪽에 있는 표현식 (expression) (RHS) 이 먼저 평가되어 결과 값 ( rvalue 또는 right-value 라고 함) 을 생성합니다. 그런 다음 rvalue는 왼쪽에 있는 변수 (LHS) (또는 lvalue, 즉 rvalue를 저장할 수 있는 위치) 에 할당됩니다.
기본 타입
아래 표는 기본 타입의 전형적인 크기, 최소값, 최대값을 보여줍니다. 다시 한 번 말씀드리지만, 크기는 구현에 따라 다릅니다.
| 범주 | 타입 | 설명 | 바이트 (전형적인) | 최소값 (전형적인) | 최대값 (전형적인) |
|---|---|---|---|---|---|
| 정수 | int(또는 signed int) | 부호 있는 정수 (최소 16 비트) | 4 (2) | -2147483648 | 2147483647 |
| 정수 | unsigned int | 부호 없는 정수 (최소 16 비트) | 4 (2) | 0 | 4294967295 |
| 정수 | char | 문자 (구현에 따라 부호 있거나 없을 수 있음) | 1 | ||
| 정수 | signed char | 문자 또는 부호 있는 작은 정수 (부호 있음 보장) | 1 | -128 | 127 |
| 정수 | unsigned char | 문자 또는 부호 없는 작은 정수 (부호 없음 보장) | 1 | 0 | 255 |
| 정수 | signed short | 짧은 부호 있는 정수 (최소 16 비트) | 2 | -32768 | 32767 |
| 정수 | unsigned short | 부호 없는 짧은 정수 (최소 16 비트) | 2 | 0 | 65535 |
| 정수 | long | 긴 부호 있는 정수 (최소 32 비트) | 4 (8) | -2147483648 | 2147483647 |
| 정수 | unsigned long | 부호 없는 긴 정수 (최소 32 비트) | 4 (8) | 0 | 위와 동일 |
| 정수 | long long | 매우 긴 부호 있는 정수 (최소 64 비트) | 8 | -2e^63 | 2e^63-1 |
| 정수 | unsigned long long | 부호 없는 매우 긴 정수 (최소 64 비트) | 8 | 0 | 2e^64-1 |
| 실수 | float | 부동 소수점 숫자, ≈7 자리 | 4 | 3.4e^38 | 3.4e^(-38) |
| 실수 | double | 배정밀도 부동 소수점 숫자, ≈15 자리 | 8 | 1.7e^308 | 1.7e^(-308) |
| 실수 | long double | long double 정밀도 부동 소수점 숫자, ≈19 자리 | 12 (8) | ||
| 부울 숫자 | bool | true 또는 false의 부울 값 |
1 | false (0) | true (1 또는 0 이 아닌 값) |
| 와이드 문자 | wchar_tchar16_t ,char32_t | 와이드 (2 바이트) 문자 | 2 (4) |
sizeof 연산자
C/C++ 는 피연산자의 크기 (바이트 단위) 를 얻기 위해 단항 sizeof 연산자를 제공합니다. 다음 프로그램은 sizeof 연산자를 사용하여 기본 타입의 크기를 출력합니다 (다음 코드를 /home/labex/Code의 test.cpp에 저장).
/*
* Print Size of Fundamental Types.
*/
#include <iostream>
using namespace std;
int main() {
cout << "sizeof(char) is " << sizeof(char) << " bytes " << endl;
cout << "sizeof(short) is " << sizeof(short) << " bytes " << endl;
cout << "sizeof(int) is " << sizeof(int) << " bytes " << endl;
cout << "sizeof(long) is " << sizeof(long) << " bytes " << endl;
cout << "sizeof(long long) is " << sizeof(long long) << " bytes " << endl;
cout << "sizeof(float) is " << sizeof(float) << " bytes " << endl;
cout << "sizeof(double) is " << sizeof(double) << " bytes " << endl;
cout << "sizeof(long double) is " << sizeof(long double) << " bytes " << endl;
cout << "sizeof(bool) is " << sizeof(bool) << " bytes " << endl;
return 0;
}
출력:
sizeof(char) is 1 bytes
sizeof(short) is 2 bytes
sizeof(int) is 4 bytes
sizeof(long) is 4 bytes
sizeof(long long) is 8 bytes
sizeof(float) is 4 bytes
sizeof(double) is 8 bytes
sizeof(long double) is 12 bytes
sizeof(bool) is 1 bytes

typedef 문
unsigned int를 여러 번 입력하는 것은 귀찮을 수 있습니다. typedef 문은 기존 타입에 대한 새 이름을 생성하는 데 사용할 수 있습니다. 예를 들어, "unsigned int"에 대한 "uint"라는 새 타입을 다음과 같이 만들 수 있습니다. #include 바로 뒤에 typedef를 배치해야 합니다. 프로그램의 가독성과 이해도를 떨어뜨릴 수 있으므로 typedef를 사용할 때는 주의해야 합니다.
typedef unsigned int uint;
많은 C/C++ 컴파일러는 unsigned int의 typedef인 size_t라는 타입을 정의합니다.
typedef unsigned int size_t;
기본 타입 및 문자열 리터럴
정수 리터럴 (integer literals)
123 및 -456과 같은 정수는 기본적으로 int로 처리됩니다. 예를 들어,
int number = -123;
int sum = 4567;
기본 10 진수 정수 외에도, 16 진수 값에는 접두사 '0x'를, 이진수 값에는 접두사 '0b'를 사용할 수 있습니다 (일부 컴파일러에서). 예를 들어,
int number1 = 1234; // 10 진수
int number2 = 01234; // 8 진수 1234, 10 진수 2322
int number3 = 0x1abc; // 16 진수 1ABC, 10 진수 15274
int number4 = 0b10001001; // 이진수 (일부 컴파일러에서는 작동하지 않을 수 있음)
long 리터럴은 접미사 'L' 또는 'l'로 식별됩니다 (숫자 1 과 혼동될 수 있으므로 소문자는 피하십시오). long long int는 접미사 'LL'로 식별됩니다. 또한 unsigned int에는 접미사 'U'를, unsigned long에는 'UL'을, unsigned long long int에는 'ULL'을 사용할 수 있습니다. 예를 들어,
long number = 12345678L; // long 에 대한 접미사 'L'
long sum = 123; // int 123 은 long 123L 로 자동 캐스팅됨
long long bigNumber = 987654321LL; // long long int 에는 접미사 'LL' 필요
short 리터럴에는 접미사가 필요하지 않습니다. 그러나 허용된 범위 내에서 정수 값만 사용할 수 있습니다. 예를 들어,
short midSizeNumber = -12345;
부동 소수점 리터럴 (floating-point literals)
55.66 및 -33.44와 같은 소수점이 있는 숫자는 기본적으로 double로 처리됩니다. 또한 1.2e3, -5.5E-6과 같이 과학적 표기법으로 표현할 수도 있습니다. 여기서 e 또는 E는 10 의 거듭제곱 지수를 나타냅니다. 분수 부분 또는 지수 앞에 더하기 기호 (+) 또는 빼기 기호 (-) 를 붙일 수 있습니다. 지수는 정수여야 합니다.
float 리터럴에는 'f' 또는 'F' 접미사를 사용해야 합니다. 예를 들어, -1.2345F. 예를 들어,
float average = 55.66; // 오류! RHS 는 double 입니다. float 에는 접미사 'f'가 필요합니다.
float average = 55.66f;
long double에는 접미사 'L' (또는 'l') 을 사용합니다.
bool 리터럴 (bool literals)
bool 리터럴은 true와 false의 두 가지뿐입니다. 예를 들어,
bool done = true;
bool gameOver = false;
int i;
if (i == 9) { // true 또는 false 반환
......
}
문자 리터럴 (character literals)
인쇄 가능한 char 리터럴은 작은 따옴표 쌍으로 문자를 묶어 작성합니다. 예를 들어, 'z', '$', 및 '9'. C++ 에서 문자는 8 비트 ASCII 코드를 사용하여 표현되며, 산술 연산에서 8 비트 부호 있는 정수로 처리될 수 있습니다. 즉, char와 8 비트 부호 있는 정수는 상호 교환 가능합니다. 또한 [-128, 127] 범위의 정수를 char 변수에 할당할 수 있으며, [0, 255] 범위의 정수를 unsigned char에 할당할 수 있습니다. 예를 들어,
char letter = 'a'; // 97 과 동일
char anotherLetter = 98; // 문자 'b'와 동일
cout << letter << endl; // 'a' 출력
cout << anotherLetter << endl; // 숫자 대신 'b' 출력
anotherLetter += 2; // 100 또는 'd'
cout << anotherLetter << endl; // 'd' 출력
cout << (int)anotherLetter << endl; // 100 출력
문자열 리터럴 (string literals)
String 리터럴은 큰 따옴표 쌍으로 묶인 0 개 이상의 문자로 구성됩니다. 예를 들어, "Hello, world!", "The sum is ", "". 예를 들어,
String directionMsg = "Turn Right";
String greetingMsg = "Hello";
String statusMsg = ""; // 빈 문자열
예시 (리터럴)
/* Testing Primitive Types */
#include <iostream>
using namespace std;
int main() {
char gender = 'm'; // char 는 작은 따옴표로 묶임
bool isMarried = true; // true(0 이 아닌 값) 또는 false(0)
unsigned short numChildren = 8; // [0, 255]
short yearOfBirth = 1945; // [-32767, 32768]
unsigned int salary = 88000; // [0, 4294967295]
double weight = 88.88; // 소수 부분 포함
float gpa = 3.88f; // float 에는 접미사 'f' 필요
// "cout <<"는 모든 타입의 값을 출력하는 데 사용될 수 있습니다.
cout << "Gender is " << gender << endl;
cout << "Is married is " << isMarried << endl;
cout << "Number of children is " << numChildren << endl;
cout << "Year of birth is " << yearOfBirth << endl;
cout << "Salary is " << salary << endl;
cout << "Weight is " << weight << endl;
cout << "GPA is " << gpa << endl;
return 0;
}
출력:
Gender is m
Is married is 1 // true
Number of children is 8
Year of birth is 1945
Salary is 88000
Weight is 88.88
GPA is 3.88
요약
이 부분에서는 몇 가지 기본 타입을 소개했습니다. 변수를 어떻게 표현하고 어떻게 연산하는지 알아야 합니다. 각 타입의 메모리 크기와 각 타입의 범위를 염두에 두십시오.



