
C++에서는 다양한 데이터 타입을 통해 변수의 값과 메모리 사용을 정의할 수 있다. 정수형, 실수형, 문자형, 불리언 등 기본적인 데이터 타입부터, 포인터, 배열, 구조체, 클래스 같은 파생 타입과 사용자 정의 타입까지 모두 정리해보았다.
정수형은 양수와 음수를 모두 표현할 수 있는 정수 타입이다. 일반적으로 4바이트를 차지한다.
int num = 42;
변형된 정수형:
• short : 더 작은 범위
• long : 더 넓은 범위
• long long : 아주 큰 범위
실수형은 소수점을 포함한 값을 표현할 때 사용한다.
float pi = 3.14f;
double pi_high_precision = 3.1415926535;
문자형은 하나의 문자나 기호를 저장하며, ASCII 값을 기반으로 한다.
char letter = 'A';
논리값 true 또는 false를 저장한다.
bool is_cpp_fun = true;
같은 타입의 여러 값을 저장할 수 있다.
int numbers[5] = {1, 2, 3, 4, 5};
변수의 메모리 주소를 저장한다.
int num = 42;
int* pNum = #
변수에 별칭을 붙여 같은 메모리 공간을 공유한다.
int num = 42;
int& numRef = num;
서로 다른 타입을 하나의 묶음으로 저장한다.
struct Person {
std::string name;
int age;
float height;
};
Person p1 = {"John Doe", 30, 5.9};
구조체와 비슷하지만, 기본 접근 제어가 private이다.
class Person {
public:
std::string name;
int age;
void printInfo() {
std::cout << "Name: " << name << ", Age: " << age << '\n';
}
};
Person p1;
p1.name = "John Doe";
p1.age = 30;
하나의 메모리 공간을 여러 타입이 공유한다.
union Data {
int num;
char letter;
float decimal;
};
Data myData;
myData.num = 42;
C++는 정적 타입 언어라서 변수의 타입이 컴파일 타임에 결정된다. 이는 타입 안정성과 오류 예방에 도움된다.
#include <iostream>
int main() {
int num = 65;
double pi = 3.14159;
char c = 'c';
c = num; // 65는 문자 'A'로 변환됨
num = pi; // 3.14159는 정수 3으로 변환됨
std::cout << "num: " << num << '\n';
std::cout << "pi: " << pi << '\n';
std::cout << "c: " << c << '\n';
return 0;
}
C++는 정적 타입 언어지만, 제한적으로 동적 타이핑을 사용할 수 있다.
모든 타입의 주소를 담을 수 있는 포인터다.
void* void_ptr;
int x = 42;
void_ptr = &x;
std::cout << *(static_cast<int*>(void_ptr));
어떤 타입이든 안전하게 저장할 수 있는 컨테이너다.
#include <any>
std::any value;
value = 42;
std::cout << std::any_cast<int>(value);
런타임에 객체의 타입을 확인할 수 있는 기능이다.
객체의 타입 정보를 반환한다.
#include <typeinfo>
Base* ptr = new Derived;
std::cout << typeid(*ptr).name();
다운캐스팅 시 타입을 확인하여 안전하게 변환한다.
Base* base = new Derived1;
Derived1* d1 = dynamic_cast<Derived1*>(base);
C++에서의 데이터 타입은 프로그램의 안정성과 효율성을 좌우한다. 정적 타이핑으로 안전한 코드 작성을 돕고, 필요에 따라 동적 타입 기능도 제공한다. 다양한 데이터 타입을 잘 이해하고 활용하면 더 견고한 프로그램을 만들 수 있다.