이 문서는 C++ 프로그래밍의 기초인 변수(variable)의 개념, 그리고 컴퓨터가 데이터를 어떻게 문자, 실수, 불리언 등의 형태로 메모리에 저장하고 처리하는지에 대해 설명한다.
특히 ASCII 코드, 실수의 근사치 표현, 불리언 타입의 명확성, 변수의 메모리 저장 위치, 오버플로우/언더플로우 현상, 그리고 좋은 변수 선언 습관까지 포함된 내용을 코드 예시와 함께 통합적으로 다룬다.
이 강의는 단순한 문법 암기를 넘어, 컴퓨터 내부 동작 원리를 정확히 이해하고 변수와 타입을 올바르게 사용하는 데 초점을 맞춘다.
| 변수 종류 | 저장 위치 | 특징 |
|---|---|---|
| 전역 변수 | Data 영역 | 프로그램 전체에서 접근 가능. 종료 시까지 유지 |
| 지역 변수 | Stack 영역 | 함수/블록 내에서만 유효. 블록 종료 시 소멸 |
| 동적 변수 | Heap 영역 | 런타임에 생성. new로 할당, delete로 해제 |
| 타입 | 바이트 수 | 값의 범위 또는 특징 |
|---|---|---|
char | 1 | -128 ~ 127 (ASCII 문자 저장) |
unsigned char | 1 | 0 ~ 255 |
int | 4 | -2,147,483,648 ~ 2,147,483,647 |
unsigned int | 4 | 0 ~ 4,294,967,295 |
float | 4 | ±3.4E+38 (정밀도 약 7자리, 단정도) |
double | 8 | ±1.7E+308 (정밀도 약 15자리, 배정도) |
bool | 1 | true(1) 또는 false(0) |
char와 ASCII 코드char 타입은 실제로는 숫자(정수)를 저장한다.'A' = 65, '0' = 48(int) 캐스팅을 통해 문자 → 아스키 코드 값을 출력할 수 있다.char ch = 'A';
cout << (int)ch; // 출력: 65
float, double의 실수 표현 – 근사값float(4바이트)도 충분하지만, 더 높은 정밀도가 필요할 경우 double을 사용.double로 처리되므로, float로 명시하려면 f를 붙여야 한다.float f = 3.14f; // float
double d = 3.14; // double
bool의 참/거짓 표현bool은 참/거짓을 명확하게 표현하는 타입으로, true = 1, false = 0으로 저장된다.int로도 0/1을 표현할 수 있지만, 불분명하거나 오류가 발생하기 쉬워 bool 사용이 권장된다.bool isRunning = true;
if (isRunning) {
cout << "Running!";
}
int hp = 100; // 정수형 변수 선언 및 초기화
float speed = 3.5f; // 단정도 실수형. f를 붙여 float 타입 명시
char grade = 'A'; // 문자형 변수 초기화
bool isAlive = true; // 논리형 변수. true(1) 저장됨
int, float, char, bool 모두 기본 데이터 타입.double이기 때문에, float로 쓰려면 반드시 f 접미사를 사용해야 한다.char는 ASCII 값을 기반으로 정수 저장.bool은 내부적으로 1(true), 0(false)으로 처리된다.int maxHp = 200; // 전역 변수 → Data 영역
void func() {
int localHp = 100; // 지역 변수 → Stack 영역
}
new 연산자는 런타임 시 메모리를 Heap에서 할당하고, 사용이 끝났을 때 delete로 수동 해제해야 한다.int hp;
cout << hp; // 결과는 예측 불가 (쓰레기 값 출력)
short maxValue = 32767; // short 최대값
maxValue += 1;
cout << maxValue; // 출력: -32768 (오버플로우 발생)
float pi_f = 3.14159f;
double pi_d = 3.14159265359;
cout << pi_f << endl; // 출력: 약 3.14159
cout << pi_d << endl; // 출력: 3.14159265359 (더 정확)
float는 정밀도가 약 7자리, double은 약 15자리까지 정확하게 표현 가능.char letter = 'A';
cout << "Char: " << letter << endl; // 출력: A
cout << "ASCII: " << (int)letter << endl; // 출력: 65
(int) 캐스팅으로 문자 → 정수(ASCII 값) 변환 가능.char: 문자 표현. 내부적으로는 정수 저장 (ASCII 코드 기반)int: 정수 표현. 4바이트 범위 내 값 저장float, double: 실수 표현. 근사값 저장. float은 f 접미사 필요bool: 논리값 표현. true/false, 내부적으로 1/0 저장delete로 해제해야 메모리 누수가 없다.int x ❌ → int playerScore ✅)const로 선언하여 의도를 명확히 표현