C++
C Plus Plus
고성능 시스템 프로그래밍 언어. 게임 엔진, OS, 브라우저에 사용. C의 확장.
C Plus Plus
고성능 시스템 프로그래밍 언어. 게임 엔진, OS, 브라우저에 사용. C의 확장.
C++는 1979년 덴마크 컴퓨터 과학자 Bjarne Stroustrup이 Bell Labs에서 개발한 범용 프로그래밍 언어입니다. 원래 "C with Classes"라는 이름으로 시작했으며, C 언어의 효율성을 유지하면서 객체 지향 프로그래밍 기능을 추가한 것이 특징입니다.
C++는 저수준 메모리 조작과 고수준 추상화를 모두 지원하는 멀티 패러다임 언어입니다. 절차적, 객체 지향, 제네릭, 함수형 프로그래밍을 모두 지원하며, "당신이 사용하지 않는 것에 대해서는 비용을 지불하지 않는다(zero-overhead abstraction)"는 철학을 따릅니다.
C++의 핵심 특징으로는 클래스와 상속, 템플릿을 통한 제네릭 프로그래밍, RAII(Resource Acquisition Is Initialization) 패턴, 연산자 오버로딩, 다중 상속 등이 있습니다. C++11 이후 람다 표현식, 스마트 포인터, 이동 시맨틱스 등 현대적 기능이 대폭 추가되었습니다.
실무에서 C++는 게임 엔진(Unreal Engine, Unity 코어), 운영체제(Windows, Linux 커널 일부), 웹 브라우저(Chrome, Firefox), 데이터베이스(MySQL, MongoDB), 임베디드 시스템, 고빈도 거래 시스템 등 성능이 중요한 분야에서 널리 사용됩니다. 2025년 현재 TIOBE 지수에서 지속적으로 상위권을 유지하고 있으며, AI/ML 분야에서도 TensorFlow, PyTorch의 핵심 엔진이 C++로 작성되어 있습니다.
// 1. 기본 클래스와 생성자/소멸자
#include <iostream>
#include <string>
#include <memory>
#include <vector>
class Animal {
protected:
std::string name;
public:
Animal(const std::string& n) : name(n) {}
virtual ~Animal() = default;
virtual void speak() const = 0; // 순수 가상 함수
};
class Dog : public Animal {
public:
Dog(const std::string& n) : Animal(n) {}
void speak() const override {
std::cout << name << "가 멍멍 짖습니다!" << std::endl;
}
};
// 2. 템플릿과 스마트 포인터
template<typename T>
class Container {
private:
std::vector<T> items;
public:
void add(T item) { items.push_back(std::move(item)); }
size_t size() const { return items.size(); }
const T& get(size_t index) const { return items.at(index); }
};
// 3. 람다와 알고리즘 (C++11/14/17)
#include <algorithm>
int main() {
// 스마트 포인터로 메모리 자동 관리
auto dog = std::make_unique<Dog>("바둑이");
dog->speak(); // 출력: 바둑이가 멍멍 짖습니다!
// 템플릿 컨테이너 사용
Container<int> numbers;
numbers.add(10);
numbers.add(20);
std::cout << "크기: " << numbers.size() << std::endl;
// 람다와 STL 알고리즘
std::vector<int> vec = {5, 2, 8, 1, 9};
std::sort(vec.begin(), vec.end(), [](int a, int b) {
return a < b; // 오름차순 정렬
});
// 범위 기반 for 루프
for (const auto& num : vec) {
std::cout << num << " "; // 출력: 1 2 5 8 9
}
return 0;
}
"이 모듈은 성능이 크리티컬해서 C++로 작성하는 게 좋겠습니다. Python 바인딩은 pybind11로 제공하면 기존 ML 파이프라인과도 쉽게 통합할 수 있어요."
"C++에서 스마트 포인터는 RAII 원칙을 구현합니다. unique_ptr은 단독 소유권, shared_ptr은 공유 소유권을 나타내며, 참조 카운팅으로 메모리를 자동 해제합니다. 순환 참조 문제는 weak_ptr로 해결할 수 있습니다."
"여기 raw 포인터 대신 std::unique_ptr 쓰는 게 좋겠어요. 예외 발생 시 메모리 누수 가능성이 있고, 소유권도 명확해집니다. 그리고 const 참조로 받으면 불필요한 복사도 피할 수 있습니다."
new로 할당한 메모리를 delete하지 않거나, 해제된 메모리에 접근하면 치명적 버그가 발생합니다. 가능하면 스마트 포인터(unique_ptr, shared_ptr)를 사용하고, 원시 포인터는 소유권이 없는 관찰용으로만 쓰세요.
배열 범위 초과, null 역참조, 초기화되지 않은 변수 사용 등은 UB를 유발합니다. 컴파일러 경고를 활성화(-Wall -Wextra)하고, AddressSanitizer 같은 도구로 런타임 검사를 하세요.
C++11/14/17/20의 현대적 기능을 적극 활용하세요. auto 타입 추론, 범위 기반 for, 람다, 이동 시맨틱스, std::optional, std::string_view 등은 코드를 더 안전하고 효율적으로 만듭니다.