C++ Language Concepts 정리

gigyesik·2025년 6월 24일

developer-roadmap-c++

목록 보기
11/20

C++ Language Concepts 정리

C++는 강력하고 유연한 고수준 언어로, 다양한 언어 개념을 바탕으로 복잡한 시스템과 애플리케이션을 효율적으로 개발할 수 있다. 이번 글에서는 C++의 핵심 언어 개념(Language Concepts)을 정리한다.


변수와 데이터 타입

C++는 다양한 기본 타입을 제공한다:

int age = 25;
float height = 1.7f;
double salary = 50000.0;
char grade = 'A';
bool isEmployed = true;

제어 구조

조건문, 반복문 등을 통해 프로그램의 흐름을 제어한다.

if (age > 18) {
    std::cout << "You are eligible to vote.";
} else {
    std::cout << "You are not eligible to vote.";
}

for (int i = 0; i < 5; i++) {
    std::cout << "Hello World!";
}

함수

작은 단위로 코드를 분리하여 재사용성과 가독성을 높인다.

int add(int a, int b) {
    return a + b;
}

배열과 벡터

같은 타입의 데이터 묶음을 다룰 때 사용한다.

int marks[] = {90, 80, 95, 85};
std::vector<int> scores = {10, 20, 30, 40};

포인터

다른 변수의 메모리 주소를 저장하는 변수로, 효율적인 메모리 제어에 필수적이다.

int num = 10;
int* p = &num;

구조체와 클래스

사용자 정의 데이터 타입으로, 데이터와 함수를 하나로 묶는다.

struct Student {
    std::string name;
    int age;
};

class Employee {
public:
    std::string name;
    int age;
    void displayInfo() {
        std::cout << "Name: " << name << "\nAge: " << age;
    }
};

상속과 다형성

객체지향 프로그래밍의 핵심 개념으로, 코드 재사용성과 확장성을 높인다.

class Base {
public:
    void display() {
        std::cout << "This is the base class.";
    }
};

class Derived : public Base {
public:
    void display() {
        std::cout << "This is the derived class.";
    }
};

예외 처리

예외 상황을 우아하게 처리하기 위한 구조이다.

try {
    int result = a / b;
} catch (const exception &e) {
    std::cout << "Caught an exception: " << e.what();
}

auto (자동 타입 추론)

auto 키워드를 사용하면 컴파일러가 변수 타입을 자동으로 유추한다.

auto x = 42;  // int로 추론됨

타입 캐스팅 요약

  • C-style : C 방식의 단순 치환. 안정성 낮음
  • static_cast : 컴파일 타임 타입 체크. 안정성 높음
  • dynamic_cast : 런타임 타입 체크. 안정성 매우 높음
  • reinterpret_cast : 비트 수준 강제 해석. 안정성 매우 낮음
  • const_cast : const 제거/추가. 안정성 낮음

Undefined Behavior (정의되지 않은 동작)

C++에서 언어 규칙을 어겼을 때 발생하는 예측 불가능한 결과로, 반드시 피해야 한다.

예:

  • 초기화되지 않은 변수 접근
  • 배열 범위 초과
  • 널 포인터 역참조
  • 0으로 나누기

ADL (Argument Dependent Lookup)

함수 호출 시 인자의 네임스페이스를 따라 함수 탐색 범위를 확장하는 기능.

namespace MyNamespace {
    class MyClass { ... };
    std::ostream& operator<<(std::ostream& os, const MyClass& obj) { ... }
}

MyNamespace::MyClass obj;
std::cout << obj;  // ADL 덕분에 작동함

Name Mangling

C++에서 함수 오버로딩, 네임스페이스 등을 지원하기 위해 함수/변수 이름을 컴파일 타임에 고유하게 인코딩하는 과정.

int add(int a, int b) {}
// → 컴파일러가 _Z3addii 같은 내부 이름으로 변경함

매크로 (Macros)

전처리기 수준에서 코드 치환을 수행하는 기능으로, #define을 통해 정의한다.

#define PI 3.14159
#define SQUARE(x) ((x) * (x))

조건부 컴파일 예시:

#ifdef DEBUG
std::cout << "디버깅 모드";
#endif

이 글은 C++를 처음 시작하거나 복습하고자 하는 개발자를 위한 핵심 요약이며, 이후 고급 개념으로 확장하기 위한 기초를 다지는 데 도움이 된다.

profile
Server Dev

0개의 댓글