C++
기본 정보
- 이름: C++
- 분류: 범용 프로그래밍 언어
- 개발자: 비야네 스트롭스트룹 (Bjarne Stroustrup)
- 최초 공개: 1985년
- 기반 언어: C
- 주요 용도: 게임 개발, 시스템 개발, 엔진 개발, 금융 시스템, 고성능 애플리케이션
- 관련 주제: #C++ #객체지향 #게임개발 #시스템프로그래밍
개요
C++는 C 언어를 기반으로 객체지향 프로그래밍(OOP) 기능을 추가하여 개발된 범용 프로그래밍 언어이다.
높은 성능과 직접적인 메모리 제어가 가능하여 게임 엔진, 운영체제, 임베디드 시스템, 금융 시스템, 그래픽 프로그램 등 성능이 중요한 분야에서 널리 사용된다.
현대 C++(C++11 이후)는 스마트 포인터, 람다식, 자동 타입 추론 등 생산성과 안정성을 높이는 기능을 제공한다.
주요 특징
- C 언어와 높은 호환성
- 객체지향 프로그래밍 지원
- 제네릭 프로그래밍(Template)
- RAII(Resource Acquisition Is Initialization)
- 높은 실행 성능
- 메모리 직접 제어 가능
- STL(Standard Template Library) 제공
Hello World
#include <iostream>
int main(){
std::cout << "Hello C++" << std::endl;
return 0;
}
변수
int age = 30;
double score = 99.5;
char grade = 'A';
std::string name = "구름";
데이터 타입
기본형
- bool
- char
- int
- float
- double
- long
- long long
사용자 정의형
- class
- struct
- enum
- union
조건문
if(age >= 20){
std::cout << "성인";
}else{
std::cout << "미성년자";
}
반복문
for
for(int i=0;i<5;i++){
std::cout << i;
}
range-based for
std::vector<int> nums={1,2,3};
for(auto n : nums){
std::cout << n;
}
함수
int add(int a,int b){
return a+b;
}
클래스
class User{
public:
std::string name;
int age;
};
객체 생성
User user;
user.name = "구름";
또는
User *user = new User();
생성자
class User{
public:
User(){
std::cout<<"생성";
}
};
객체 생성 시 자동으로 호출된다.
상속
class Animal{
};
class Dog : public Animal{
};
객체지향 프로그래밍의 핵심 기능이다.
다형성
class Animal{
public:
virtual void sound(){}
};
virtual 키워드를 통해 런타임 다형성을 구현할 수 있다.
Template
template<typename T>
T add(T a,T b){
return a+b;
}
자료형에 관계없이 재사용 가능한 코드를 작성할 수 있다.
STL
대표 컨테이너
- vector
- list
- deque
- map
- set
- unordered_map
- unordered_set
- queue
- stack
예시
std::vector<int> list;
list.push_back(10);
Smart Pointer
auto ptr = std::make_unique<User>();
대표 종류
- unique_ptr
- shared_ptr
- weak_ptr
현대 C++에서는 new/delete보다 스마트 포인터 사용이 권장된다.
Lambda
auto add = [](int a,int b){
return a+b;
};
익명 함수를 간결하게 작성할 수 있다.
Auto
auto number = 100;
컴파일러가 자료형을 자동으로 추론한다.
예외 처리
try{
throw 1;
}catch(...){
}
예외(Exception)를 처리하여 프로그램의 안정성을 높일 수 있다.
주요 활용 분야
- 게임 개발
- 게임 엔진
- Unreal Engine
- 운영체제
- 브라우저 엔진
- 금융 시스템
- CAD 프로그램
- 3D 그래픽
- 임베디드 시스템
- 로봇 제어
대표 라이브러리
- STL
- Boost
- Qt
- OpenCV
- SDL
- SFML
대표 엔진
- Unreal Engine
- CryEngine
Unreal Engine은 대부분 C++ 기반으로 개발된다.
C++와 함께 사용하는 기술
장점
- 매우 빠른 실행 속도
- 객체지향 지원
- 메모리 직접 제어 가능
- 높은 확장성
- 대규모 프로젝트에 적합
- 게임 개발에 강점
단점
- 문법이 복잡함
- 학습 난이도가 높음
- 메모리 관리 실수 가능
- 템플릿 오류 메시지가 복잡할 수 있음
- 생산성이 최신 언어보다 낮을 수 있음
실무 메모
실무에서는 다음과 같은 방식이 권장된다.
- C++17 이상 사용
auto적극 활용nullptr사용- 스마트 포인터 사용
- RAII 기반 설계
- STL 우선 활용
const적극 사용new/delete직접 사용 최소화- clang-format으로 코드 스타일 통일
- AddressSanitizer 등으로 메모리 오류 검사
C++가 사용되는 대표 프로젝트
- Unreal Engine
- Google Chrome (일부)
- Mozilla Firefox (일부)
- Blender
- Adobe Photoshop (일부)
- MySQL Server
- LLVM/Clang
관련 문서
출처
- ISO C++ 공식 사이트
- cppreference C++ Documentation
- 위키백과 「C++」