본문 바로가기

교재 목차

기초 문법과 메모리 모델에서 객체지향·템플릿·STL·동시성·성능 진단까지 C++의 선택 기준을 단계적으로 익힙니다.

C++은 값이 메모리의 어디에 있고 언제 사라지는지를 프로그래머가 직접 정할 수 있는 언어입니다. 그 덕분에 게임 엔진이나 브라우저, 데이터베이스처럼 빠르고 메모리를 아껴 써야 하는 프로그램에 널리 쓰이지만, 같은 이유로 잘못 쓰면 컴파일러가 막아 주지 못하는 오류도 생깁니다. 이 교재는 작은 프로그램을 빌드하고 실행하는 데서 시작해, 각 문법이 값과 객체의 수명을 어떻게 다루는지, 그리고 여러 방법 가운데 무엇을 골라야 하는지에 차례로 답해 갑니다. C 언어를 먼저 알 필요는 없습니다.

이 교재는 주요 컴파일러가 널리 지원하는 C++20을 기준으로 하고, C++23의 기능은 그 자리에서 표시합니다. 명령은 Windows에서 MSYS2 UCRT64 환경의 GCC와 VS Code를 기준으로 하며, macOS와 Linux에서는 시스템의 GCC나 Clang으로 같은 명령을 쓸 수 있습니다. 타입의 크기처럼 환경마다 다른 값은 Windows x86-64의 GCC를 기준으로 적었습니다.

본문에 실은 출력은 C++ 표준과 cppreference, GCC를 비롯한 각 도구의 공식 문서에 적힌 동작에 따라 손으로 계산한 것이며, 실제로 실행해 맞춘 출력은 아닙니다. 스레드의 실행 순서나 걸린 시간처럼 실행할 때마다 달라지는 값은 무엇이 달라지는지만 적었고, 정의되지 않은 동작을 보여 주는 코드에는 출력을 싣지 않았습니다. 코드를 읽을 때는 먼저 출력을 예상한 뒤 본문의 출력과 비교하고, 둘이 다르면 어느 줄에서 값이 달라졌는지 따라가 보세요.


학습 경로

1단계 · 언어와 기본 문법(1–4장)에서는 C++의 역사와 쓰임을 살펴보고, 컴파일러와 편집기를 설치해 첫 프로그램을 빌드한 뒤, 소스 파일이 전처리와 컴파일, 링크를 거쳐 실행 파일이 되는 과정을 따라갑니다. 이어서 기본 데이터 타입과 변수의 초기화, 상수와 리터럴, 형변환, 네임스페이스를 익히고, 산술과 비교, 논리, 비트 연산자와 우선순위, 그리고 if와 switch, for와 while, break와 continue로 실행 흐름을 정합니다.

2단계 · 데이터와 함수, 메모리(5–8장)에서는 1차원과 다차원 배열, C 스타일 문자열과 std::string으로 여러 값을 다루고, 함수를 정의하고 오버로딩하며 인라인 함수와 기본 매개변수, 재귀를 익힙니다. 이어서 포인터와 동적 메모리 할당, 참조자, 포인터와 배열의 관계, const 포인터로 값의 주소와 수명을 다루고, 스트림으로 텍스트 파일과 바이너리 파일을 읽고 씁니다.

3단계 · 객체 지향(9–10장)에서는 클래스를 정의하고 접근 지정자로 내부를 감추며, 생성자와 소멸자로 객체의 수명을 정하고, 멤버 함수와 연산자 오버로딩, 프렌드를 익힙니다. 이어서 상속과 가상 함수로 다형성을 만들고, 추상 클래스와 다중 상속, 가상 상속을 다룬 뒤, 복사와 이동을 직접 정의하는 Rule of Three, Five, Zero로 자원을 가진 클래스를 설계합니다.

4단계 · 템플릿과 표준 라이브러리(11–12장)에서는 함수 템플릿과 클래스 템플릿, 템플릿 특수화로 타입에 관계없이 쓸 수 있는 코드를 만들고, 표준 라이브러리의 컨테이너와 반복자, 알고리즘, 함수 객체를 조합해 자료를 저장하고 처리합니다.

5단계 · 예외와 현대 C++(13–14장)에서는 예외를 던지고 잡는 방법과 스택 풀기, 예외 안전성을 익히고, auto와 타입 추론, 람다 표현식, 스마트 포인터, 이동 의미론과 rvalue 참조를 다룬 뒤, C++20의 콘셉트와 범위, 모듈, 코루틴을 훑어봅니다.

6단계 · 동시성과 성능(15–16장)에서는 스레드를 만들고 뮤텍스와 조건 변수로 데이터를 함께 쓰며, std::async와 future로 결과를 나중에 받습니다. 마지막으로 프로파일러로 시간이 쓰이는 곳을 측정해 코드를 최적화하고, 디버거로 논리 오류를 추적하며, 도구로 메모리 누수를 찾습니다.

다른 교재로 이어가기

C++로 자료구조를 구현하고 알고리즘을 분석하는 연습은 자료구조·알고리즘에서 이어지고, 포인터와 캐시가 하드웨어에서 어떻게 동작하는지는 컴퓨터구조에서, 스레드와 가상 메모리를 운영체제가 어떻게 관리하는지는 운영체제에서 다룹니다. 게임 엔진에서 C++을 쓰는 방법은 언리얼 C++로, 소유권을 컴파일러가 검사하는 다른 시스템 언어는 Rust로 이어집니다.


장별 목차

이 페이지 목차

이 페이지 목차