C++ 데이터 타입 완전 정리

gigyesik·2025년 6월 17일

developer-roadmap-c++

목록 보기
6/20

썸네일

📚 C++ 데이터 타입 완전 정리

C++에서는 다양한 데이터 타입을 통해 변수의 값과 메모리 사용을 정의할 수 있다. 정수형, 실수형, 문자형, 불리언 등 기본적인 데이터 타입부터, 포인터, 배열, 구조체, 클래스 같은 파생 타입과 사용자 정의 타입까지 모두 정리해보았다.


🧩 기본 데이터 타입 (Fundamental Data Types)

🔢 정수형 (int)

정수형은 양수와 음수를 모두 표현할 수 있는 정수 타입이다. 일반적으로 4바이트를 차지한다.

int num = 42;

변형된 정수형:short : 더 작은 범위
	•	long : 더 넓은 범위
	•	long long : 아주 큰 범위

💧 실수형 (float, double)

실수형은 소수점을 포함한 값을 표현할 때 사용한다.

float pi = 3.14f;
double pi_high_precision = 3.1415926535;
  • float: 4바이트, 단정도 정밀도
  • double: 8바이트, 배정도 정밀도

🔡 문자형 (char)

문자형은 하나의 문자나 기호를 저장하며, ASCII 값을 기반으로 한다.

char letter = 'A';

✅ 불리언형 (bool)

논리값 true 또는 false를 저장한다.

bool is_cpp_fun = true;

🧵 파생 데이터 타입 (Derived Data Types)

📦 배열 (Arrays)

같은 타입의 여러 값을 저장할 수 있다.

int numbers[5] = {1, 2, 3, 4, 5};

🧭 포인터 (Pointers)

변수의 메모리 주소를 저장한다.

int num = 42;
int* pNum = #

📌 참조 (References)

변수에 별칭을 붙여 같은 메모리 공간을 공유한다.

int num = 42;
int& numRef = num;

🛠 사용자 정의 데이터 타입 (User-Defined Data Types)

🧍 구조체 (struct)

서로 다른 타입을 하나의 묶음으로 저장한다.

struct Person {
    std::string name;
    int age;
    float height;
};

Person p1 = {"John Doe", 30, 5.9};

🧑‍🏫 클래스 (class)

구조체와 비슷하지만, 기본 접근 제어가 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)

하나의 메모리 공간을 여러 타입이 공유한다.

union Data {
    int num;
    char letter;
    float decimal;
};

Data myData;
myData.num = 42;

🧪 정적 타이핑 (Static Typing)

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;
}

🔄 동적 타이핑 (Dynamic Typing in C++)

C++는 정적 타입 언어지만, 제한적으로 동적 타이핑을 사용할 수 있다.

☁️ void* 포인터

모든 타입의 주소를 담을 수 있는 포인터다.

void* void_ptr;
int x = 42;
void_ptr = &x;
std::cout << *(static_cast<int*>(void_ptr));

🧰 std::any (C++17)

어떤 타입이든 안전하게 저장할 수 있는 컨테이너다.

#include <any>

std::any value;
value = 42;
std::cout << std::any_cast<int>(value);

🔍 런타임 타입 식별 (RTTI)

런타임에 객체의 타입을 확인할 수 있는 기능이다.

📇 typeid

객체의 타입 정보를 반환한다.

#include <typeinfo>

Base* ptr = new Derived;
std::cout << typeid(*ptr).name();

🔀 dynamic_cast

다운캐스팅 시 타입을 확인하여 안전하게 변환한다.

Base* base = new Derived1;
Derived1* d1 = dynamic_cast<Derived1*>(base);

🧠 마무리

C++에서의 데이터 타입은 프로그램의 안정성과 효율성을 좌우한다. 정적 타이핑으로 안전한 코드 작성을 돕고, 필요에 따라 동적 타입 기능도 제공한다. 다양한 데이터 타입을 잘 이해하고 활용하면 더 견고한 프로그램을 만들 수 있다.


🔗 참고 링크

profile
Server Dev

0개의 댓글